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);
}
}
附图:
注:进率之间的转换存在问题没有修改,嘿嘿