创建一个GUI应用程序,用于转换若干种货币。(界面转换)

it2026-08-10  1

1.菜单创建 2.监听器创建 3.按钮创建 4.方法填充

再Swing中,任何其他组件都必须位于一个顶层容器中,JFrame和JPanel面板是常用的顶层容器

JFrame窗口容器 JPanel面板容器

http://c.biancheng.net/view/1209.html

导入包:

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*;

介绍: java.awt.*;下的BorderLayout类这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER。 例:

Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add(new Button("Okay"),BorderLayout.SOUTH);//为了方便起见,BorderLayout将缺少字符串说明的情况解释为常量 CENTER: Panel p2 = new Panel(); p2.setLayout(new BorderLayout()); p2.add(new TextArea()); // Same as p.add(new TextArea(), BorderLayout.CENTER);

在窗口中添加菜单条,由三个类实现: 菜单条 JMenuBar(不可注册侦听器) 菜单 JMenu(不可注册侦听器) 菜单项 JMenuItem(可注册侦听器)

菜单条(JMenuBar) 将其设置为窗口的菜单条,需要setJMenuBar()方法;

JMenuBar TestJMenuBar=new JMenuBar();   TestFrame.setJMenuBar(TestJMenuBar);

注:JMenuBar根据JMenu添加的顺序从左到右显示,并建立整数索引

菜单(JMenu) 添加菜单条后不会由任何菜单,需要添加,JMenu类的构造方法有4种: JMenu() 构造一个空菜单。 JMenu(Action a) 构造一个菜单,菜单属性由相应的动作来提供。 JMenu(String s) 用给定的标志构造一个菜单。 JMenu(String s,Boolean b) 用给定的标志构造一个菜单。如果布尔值为false,那么当释放鼠标按钮后,菜单项会消失;如果布尔值为true,那么当释放鼠标按钮后,菜单项仍将显示。这时的菜单称为 tearOff 菜单。

构造结束后,使用JMenuBar类的add方法添加到菜单条中

菜单项(JMenuItem) 向菜单中添加内容,可以是菜单项,可以是子菜单,可以是分隔符 在构造完后,使用JMenu类的add方法添加到菜单种

创建“确认”按钮(Swing 组件):

https://blog.csdn.net/qq_38286331/article/details/80197559

所涉及到的错误:

不能把顶级窗口放到一个容器中

https://blog.csdn.net/jasper_success/article/details/6800057

所涉及到的问题:

JTextArea和JPanel下的面板

http://c.biancheng.net/view/1221.html //文本域组件TextArea https://www.cnblogs.com/happyxiaoyu/p/5750915.html //JPanel下的面板

下面附上源码:

package zc; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.BorderLayout; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JTextField; import javax.swing.JComboBox; import javax.swing.JTextArea; import javax.swing.JTextPane; public class test8_2 { private JFrame frame; private JTextField textField; private JTextField textField_1; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { test8_2 window = new test8_2(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public test8_2() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 505, 170); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); JPanel panel = new JPanel(); panel.setBounds(-1, -1, 489, 40); frame.getContentPane().add(panel); panel.setLayout(null); JLabel lblNewLabel = new JLabel("货币名称"); lblNewLabel.setBounds(5, 11, 54, 15); panel.add(lblNewLabel); JComboBox comboBox = new JComboBox(); comboBox.setBounds(67, 7, 102, 21); comboBox.addItem("CNY"); comboBox.addItem("USD"); comboBox.addItem("GBP"); panel.add(comboBox); JLabel lblNewLabel_1 = new JLabel("所兑换货币名称"); lblNewLabel_1.setBounds(179, 11, 93, 15); panel.add(lblNewLabel_1); JComboBox comboBox_1 = new JComboBox(); comboBox_1.setBounds(293, 8, 83, 21); comboBox_1.addItem("CNY"); comboBox_1.addItem("USD"); comboBox_1.addItem("GBP"); panel.add(comboBox_1); JPanel panel_1 = new JPanel(); panel_1.setBounds(1, 43, 489, 39); frame.getContentPane().add(panel_1); panel_1.setLayout(null); textField = new JTextField(); textField.setBounds(10, 10, 166, 19); panel_1.add(textField); textField.setColumns(10); textField_1 = new JTextField(); textField_1.setBounds(289,10, 166, 20); panel_1.add(textField_1); textField_1.setColumns(10); JButton btnNewButton = new JButton("兑换"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double money = Double.parseDouble(textField.getText()); //从文本框获取输入 double money2=1; switch (comboBox.getSelectedIndex()){ //getSelectedIndex()获取JComboBox中参数值 case 0:{ if(comboBox_1.getSelectedIndex()==0){ money2=money; } if(comboBox_1.getSelectedIndex()==1){ money2=money*0.1264; } if(comboBox_1.getSelectedIndex()==2){ money2=money*0.1505; } textField_1.setText(String.valueOf(money2)); }//人民币兑换 break; case 1:{ if(comboBox_1.getSelectedIndex()==0){ money2=money*7.91; } if(comboBox_1.getSelectedIndex()==1){ money2=money; } if(comboBox_1.getSelectedIndex()==2){ money2=money*1.1833; } textField_1.setText(String.valueOf(money2)); //将结果显示再第二个文本框 }//欧元兑换 break; case 2:{ if(comboBox_1.getSelectedIndex()==0){ money2=money*6.645; } if(comboBox_1.getSelectedIndex()==1){ money2=money*0.8451; } if(comboBox_1.getSelectedIndex()==2){ money2=money; } textField_1.setText(String.valueOf(money2)); }//美元兑换 break; default: break; } } } ); btnNewButton.setBounds(386, 7, 93, 23); panel.add(btnNewButton); } }

附图: 注:进率之间的转换存在问题没有修改,嘿嘿

最新回复(0)