package com.swing; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import javax.swing.*; public class SwingComponent { JFrame f=new JFrame("测试"); //定义一个按钮,并为之指定图标 Icon okIcon=new ImageIcon("icon/angry.gif"); JButton ok=new JButton("确认", okIcon); //定义一个单选按钮,初始处于选中状态 JRadioButton male=new JRadioButton("男",true); //定义一个单选按钮,初始处于没有选中状态 JRadioButton female=new JRadioButton("女",false); //定义一个ButtonGroup,用于将上面两个JRadioButton组合在一起 ButtonGroup bg=new ButtonGroup(); //定义一个复选框,初始处于没有选中状态 JCheckBox married=new JCheckBox("是否已婚?",false); String[] colors=new String[]{"红色","绿色","蓝色"}; //定义一个下拉选择框 JComboBox colorChooser=new JComboBox(colors); //定义一个列表选择框 JList colorList=new JList(colors); //定义一个8行20列的单行文本域 JTextArea ta=new JTextArea(8,20); //定义一个40列的单行文本域 JTextField name=new JTextField(40); JMenuBar mb=new JMenuBar(); JMenu file=new JMenu("文件"); JMenu edit=new JMenu("编辑"); //创建新建菜单项 Icon newIcon=new ImageIcon("icon/ball.gif"); JMenuItem newItem=new JMenuItem("新建",newIcon); //创建保存菜单项,并为之指定图标 Icon saveIcon=new ImageIcon("icon/bag.gif"); JMenuItem saveItem=new JMenuItem("保存",saveIcon); //退出菜单项 Icon editIcon=new ImageIcon("icon/ball1.gif"); JMenuItem editItem=new JMenuItem("退出",editIcon); JCheckBoxMenuItem autoWrap=new JCheckBoxMenuItem("自动换行"); //创建“复制”菜单项,并为之指定图标 JMenuItem copyItem=new JMenuItem("复制",new ImageIcon("icon/book.png")); //创建粘贴菜单项 JMenuItem pasteItem =new JMenuItem("粘贴",new ImageIcon("icon/paste.png")); JMenu format=new JMenu("格式"); JMenuItem commentItem=new JMenuItem("注释"); JMenuItem cancelItem=new JMenuItem("取消注释"); //定义一个右键菜单用于设置程序风格 JPopupMenu pop=new JPopupMenu(); //用于组合三个风格菜单项的ButtonGroup ButtonGroup flavorGroup=new ButtonGroup(); //创建三个单选框按钮,用于设置程序的外观风格 JRadioButtonMenuItem metaItem=new JRadioButtonMenuItem("Metal风格",true); JRadioButtonMenuItem widowsItem=new JRadioButtonMenuItem("Widows风格"); JRadioButtonMenuItem motifItem=new JRadioButtonMenuItem("Motif风格"); //--------------------------用于执行界面初始化的Init方法------------------------------------------- public void init(){ //创建一个装载 了文本框、按钮的JPanel JPanel bottom=new JPanel(); bottom.add(name); bottom.add(ok); f.add(bottom,BorderLayout.SOUTH); //创建一个装载了下拉选择框、三个JCheckBox的JPanel JPanel checkPanel=new JPanel(); checkPanel.add(colorChooser); bg.add(male); bg.add(female); checkPanel.add(male); checkPanel.add(female); checkPanel.add(married); //创建一个垂直排列组件的Box,盛装多行文本域JPanel Box topLeft=Box.createVerticalBox(); //使用JScrollPane作为普通组件的JViewPort JScrollPane taJsp=new JScrollPane(ta); topLeft.add(taJsp); topLeft.add(checkPanel); //创建一个水平排列组件的Box,盛装topLeft、colorList Box top=Box.createHorizontalBox(); top.add(topLeft); top.add(colorList); //将top Box 容器添加到窗口的中间 f.add(top); //------------------下面开始组合菜单、并为菜单添加监听器----------------------------------------- //为newItem设置快捷键,设置快捷键时要使用大写字母 newItem.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK)); newItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ta.append("用户单机了新建菜单按钮 "); } }); //为file菜单添加菜单项 file.add(newItem); file.add(saveItem); file.add(editItem); //为edit菜单添加菜单项 edit.add(autoWrap); //使用addSeparator方法添加菜单分割线 edit.addSeparator(); edit.add(copyItem); edit.add(pasteItem); //为commentItem组件添加提示信息 commentItem.setToolTipText("将程序代码注释起来"); //为format菜单添加菜单项 format.add(commentItem); format.add(cancelItem); //使用添加new JMenuItem('-')的方式添加菜单分割符 edit.add(new JMenuItem("-")); //将format菜单组合到edit菜单中,从而形成二级菜单 edit.add(format); //将file、edit菜单添加到mb菜单条中 mb.add(file); mb.add(edit); //为f窗口设置菜单条 f.setJMenuBar(mb); //----------------------下面开始组合右键菜单,并安装右键菜单--------------------------------- flavorGroup.add(metaItem); flavorGroup.add(widowsItem); flavorGroup.add(motifItem); pop.add(metaItem); pop.add(widowsItem); pop.add(motifItem); //为三个菜单创建事件监听器 ActionListener flavorListener=new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { if (e.getActionCommand().equals("Metal风格")) { changeFlavor(1); } else if (e.getActionCommand().equals("Widows风格")) { changeFlavor(2); } else if (e.getActionCommand().equals("Motif风格")) { changeFlavor(3); } } catch (Exception e2) { e2.printStackTrace(); } } }; //为三个菜单添加事件监听器 metaItem.addActionListener(flavorListener); widowsItem.addActionListener(flavorListener); motifItem.addActionListener(flavorListener); //调用该方法即可设置右键菜单,无须使用事件机制 ta.setComponentPopupMenu(pop); //设置关闭窗口时,退出程序 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } //定义一个方法,用于改变界面风格 private void changeFlavor(int flavor) throws Exception{ switch(flavor){ //设置metal风格 case 1: UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); break; //设置widons风格 case 2: UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); break; case 3: UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); break; } //更新f窗口内顶级容器以及内部所有组件的UI SwingUtilities.updateComponentTreeUI(f.getContentPane()); //更新mb菜单条以及内部所有组件的UI SwingUtilities.updateComponentTreeUI(mb); //更新右键pop菜单以及内部所有组件的UI SwingUtilities.updateComponentTreeUI(pop); } public static void main(String[] args) { //设置Swing窗口使用JAVA风格 //JFrame.setDefaultLookAndFeelDecorated(true); new SwingComponent().init(); } }