swing组件的演示
xxxxxxxxxxpackage 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(); }
}