swing组件的演示
xxxxxxxxxx
package ch30;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
public class a_4_0swing_基本组件_演示1 {
JFrame f = new JFrame("测试swing基本组件");
//定义一个在右下角的复选框按钮,并为其指定图标
JButton ok = new JButton("确定",new ImageIcon("src\\img\\ok.png"));
//定义一个单选按钮,初始处于未选中的状态
JRadioButton male = new JRadioButton("男", false);
//定义一个单选按钮,初始处于选中状态
JRadioButton female = new JRadioButton("女", true);
//定义一个按钮组ButtonGroup,把上面的单选按钮male和female组合起来,才能实现二者的单选,即二者只能选一者
ButtonGroup bg = new ButtonGroup();
//定义一个复选框,初始处于没有选中状态
JCheckBox ismarried = new JCheckBox("是否已婚?", false);
//最右边的颜色列表的内容
String[] colors = { "红色", "绿色 ", "蓝色 " };
//定义一个下拉选择框,展示颜色
JComboBox<String> colorSelect = new JComboBox<String>();//这个小括号我们可以不写,因为在87行给了内容
//当然如果87没有给内容的话,上面那个小括号可以写colors,就直接使用27行数组里的颜色内容啦
//定义最右边的一个列表框,展示颜色
JList<String> colorList = new JList<String>(colors);
//定义一个8行20列的多行文本域
JTextArea ta = new JTextArea(8, 20);
//定义一个在最南部的40列的单行文本域
JTextField tf = new JTextField(40);
// 定义菜单条
JMenuBar menuBar = new JMenuBar();
//定义最左上角的菜单
JMenu fileMenue = new JMenu("文件");
JMenu editMenue = new JMenu("编辑");
//创建菜单项,并指定图标
JMenuItem newItem = new JMenuItem("新建", new ImageIcon("src\\img\\new.png"));
JMenuItem saveItem = new JMenuItem("保存", new ImageIcon("src\\img\\save.png"));
JMenuItem exitItem = new JMenuItem("退出", new ImageIcon("src\\img\\exit.png"));
JMenuItem auto = new JMenuItem("自动换行");
JMenuItem copy = new JMenuItem("复制", new ImageIcon("src\\img\\copy.png"));
JMenuItem paste = new JMenuItem("粘贴", new ImageIcon("src\\img\\paste.png"));
//定义二级菜单,将来会添加到编辑中
JMenu formatMenu = new JMenu("格式");
JMenuItem comment = new JMenuItem("注释");
JMenuItem cancelComment = new JMenuItem("取消注释");
//定义一个在空白文本域右键出现的右键菜单,用于设置程序的外观风格
JPopupMenu jPopupMenu = new JPopupMenu();
//让下面5个单选只能有一者处于单选,就需要使用按钮组,用于组合风格按钮,形成单选
ButtonGroup poupButtonBg = new ButtonGroup();
//定义在空白文本域右键出现的五个单选按钮菜单项,用于设置程序风格,单选即RadioButtonMenuItem。默认选中windowsItem
JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal 风格");
JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus 风格");
JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("Windows 风格", true);
JRadioButtonMenuItem windowsClassicItem = new JRadioButtonMenuItem("Windows 经典风格");
JRadioButtonMenuItem motifItem = new JRadioButtonMenuItem("Motif 风格");
//初始化界面,组装视图
public void init() {
//组装底部
JPanel bottomPanel = new JPanel();
bottomPanel.add(tf);
bottomPanel.add(ok);
f.add(bottomPanel, BorderLayout.SOUTH);
//组装中间的下拉选择框、男女按钮、已婚复选框
JPanel selectPanel = new JPanel();
//先给下拉选择框一些内容
colorSelect.addItem("红色");
colorSelect.addItem("绿色");
colorSelect.addItem("蓝色");
selectPanel.add(colorSelect);
//因为男女按钮只能有一者被选中,所以要先放在bg按钮组,实现单选
bg.add(male);
bg.add(female);
//组装男女按钮
selectPanel.add(male);
selectPanel.add(female);
//组装已婚复选框
selectPanel.add(ismarried);
//组装文本域和选择按钮。创建一个垂直排列的Box
Box topLeft = Box.createVerticalBox();
//使用JScrollPane作为普通组件的JViewPort
JScrollPane taJsp = new JScrollPane(ta);
topLeft.add(taJsp);
topLeft.add(selectPanel);
//组装上面的垂直box和最右边的颜色列表。创建一个水平排列的Box
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
//将top放到Frame窗口的中间区域
f.add(top);
//为newItem添加快捷键 ctrl+N
newItem.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK));
newItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ta.append("用户点击了“新建”菜单\n");
}
});
//组装最左上角的"文件"和"编辑"的右键菜单条。下面开始从小到大组装
//把"注释"和"取消注释"菜单条组装到"格式"菜单里面
formatMenu.add(comment);
formatMenu.add(cancelComment);
//把"自动换行"、"复制"、"粘贴"、"格式"菜单条,组装到"编辑"菜单里面
editMenue.add(auto);
editMenue.addSeparator();//这个是分割线,就是一条浅白色的线
editMenue.add(copy);
editMenue.add(paste);
editMenue.addSeparator();
editMenue.add(formatMenu);
//为commentItem添加提示信息
comment.setToolTipText("将程序代码注释起来");
//把"编辑"和"文件"菜单组装到最顶部的菜单条里面
menuBar.add(fileMenue);
menuBar.add(editMenue);
//把上面组装好的最顶部菜单条放到窗口里面
f.setJMenuBar(menuBar);
// 为file添加菜单项
fileMenue.add(newItem);
fileMenue.add(saveItem);
fileMenue.add(exitItem);
// 把format添加到edit中形成二级菜单
editMenue.add(formatMenu);
//组装在空白区域右键时,出现的右键菜单,一个右键菜单里面有5个菜单条
poupButtonBg.add(metalItem);
poupButtonBg.add(nimbusItem);
poupButtonBg.add(windowsItem);
poupButtonBg.add(windowsClassicItem);
poupButtonBg.add(motifItem);
//给5个风格菜单条创建事件监听器
ActionListener flavorLister = new ActionListener() {
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();//点击菜单条时会传进对应文字,这里获取一下文字
try {
changeFlavor(command);//changeFlavor是下面自己定义的方法
} catch (Exception e1) {
e1.printStackTrace();
}
}
};
//把上面的监听器注册给5个风格菜单条
metalItem.addActionListener(flavorLister);
nimbusItem.addActionListener(flavorLister);
windowsItem.addActionListener(flavorLister);
windowsClassicItem.addActionListener(flavorLister);
motifItem.addActionListener(flavorLister);
//把5个风格菜单条添加到一个组里面,才能实现5选1
jPopupMenu.add(metalItem);
jPopupMenu.add(nimbusItem);
jPopupMenu.add(windowsItem);
jPopupMenu.add(windowsClassicItem);
jPopupMenu.add(motifItem);
//当鼠标右键时就显示这个风格菜单。注意,不需要我们额外去监听鼠标右键
ta.setComponentPopupMenu(jPopupMenu);
//当点击叉号就关闭程序,以前学AWT的时候需要封装一个方法太麻烦,现在的swing只需要调用EXIT_ON_CLOSE
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置jFrame最佳大小并可见
f.pack();
f.setVisible(true);
}
//定义一个方法,用于改变界面风格
private void changeFlavor(String command) throws Exception {
switch (command) {//判断一下上面184行拿到的是什么文字,就说明用户点击了哪个菜单条
case "Metal 风格":
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case "Nimbus 风格":
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
break;
case "Windows 风格":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case "Windows 经典风格":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
break;
case "Motif 风格":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
}
//上面更改了UI之后,我们要进行刷新页面,才能显示对应UI,写法如下
//刷新顶部容器
SwingUtilities.updateComponentTreeUI(f.getContentPane());
//刷新顶部菜单
SwingUtilities.updateComponentTreeUI(menuBar);
//刷新右键菜单
SwingUtilities.updateComponentTreeUI(jPopupMenu);
}
public static void main(String[] args) {
new a_4_0swing_基本组件_演示1().init();
}
}