学习java Swing编程的一个简单Demo

来源:互联网 发布:sql with cte as 编辑:程序博客网 时间:2024/04/26 00:33

import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SwingComponent
{
 //创建窗体,JFrame
  JFrame f = new JFrame("测试");
  //定义一个按钮,并为之指定图标
  //ImageIcon(Image image)
    //根据图像对象创建一个 ImageIcon。  Icon是接口,ImageIcon实现了该接口,多态的体现
    //定义一个单选按钮,并为之指定图标
  Icon okIcon = new ImageIcon("ico/ok.png");
  JButton ok = new JButton("确认",okIcon);
  //定义一个单选按钮,出事处于选中状态
  //JradioButton  实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
  //JRadioButton(String text, boolean selected)
    //创建一个具有指定文本和选择状态的单选按钮。
  JRadioButton male = new JRadioButton("男",true);
  JRadioButton female = new JRadioButton("女",false);
  ButtonGroup bg = new ButtonGroup();
  //定义一个复选框,出事状态处于没有选中状态
  JCheckBox married = new JCheckBox("是否已婚?",false);
  String[] colors = new String[]{"红色","绿色","蓝色"};
  //定义一个下拉选择框
  //JComboBox(Object[] items)
    //创建包含指定数组中的元素的 JComboBox。
  JComboBox<String> colorChooser = new JComboBox<>(colors);
  //定义一个列表选择框??????????????
  //JList(Object[] listData)
    //构造一个 JList,使其显示指定数组中的元素。
  JList<String> 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(String s)
    //构造一个新 JMenu,用提供的字符串作为其文本。
  JMenu edit = new JMenu("编辑");
  
  Icon newIcon = new ImageIcon("ico/new.png");
  //JMenuItem(String text, Icon icon)
    //创建带有指定文本和图标的 JMenuItem。
  JMenuItem newItem = new JMenuItem("新建",newIcon);
  
  Icon saveIcon = new ImageIcon("ico/new.png");
  JMenuItem saveItem = new JMenuItem("保存",saveIcon);
  
  Icon exitIcon = new ImageIcon("ico/exit.png");
  JMenuItem exitItem = new JMenuItem("退出",exitIcon);
  JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("自动换行");
  
  JMenuItem copyItem = new JMenuItem("复制",new ImageIcon("ico/copy.png"));
  
  JMenuItem pasteItem = new JMenuItem("粘贴",new ImageIcon("ico/paste.png"));
  
  JMenu format = new JMenu("格式");
  
  JMenuItem commentItem = new JMenuItem("注释");
  
  JMenuItem cancelItem = new JMenuItem("取消注释");
  //定义一个右键菜单,用于设定程序的外观风格
  JPopupMenu pop = new JPopupMenu();
  ButtonGroup flavorGroup = new ButtonGroup();
  //创建5个单选按钮,用于设定程序的外观风格
  JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal风格",true);
  JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus风格");
  JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("windows风格");
  JRadioButtonMenuItem motifyItem = new JRadioButtonMenuItem("motifyItem风格");
  JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("windows经典风格");
  /*------------------下面是用于执行界面初始化的init方法-------------------------*/
  public void init()
  {
   //创建一个装载了文本框、按钮的JPanel
    JPanel bottom = new JPanel();
    bottom.add(name);
    bottom.add(ok);
    f.add(bottom,BorderLayout.SOUTH);//用BorderLayout布局管理器,放在最底层    
    //创建一个装载了下拉选择框、三个JCheckBox的JPanel
    JPanel checkPanel = new JPanel();
    checkPanel.add(colorChooser);
    ////既要加载在一个ButtonGroup中,也要加载在checkPanel中
    //若去掉bg.add(male);bg.add(female); 则能选两个性别
    //若去掉 checkPanel.add(male);checkPanel.add(female); 则两个性别RadioButton消失        
    bg.add(male);
    bg.add(female);
    checkPanel.add(male);
    checkPanel.add(female);
    checkPanel.add(married);
    //创建一个垂直排列的组件的Box,盛装多行文本域JPanel
    Box topLeft = Box.createVerticalBox();//创建一个从上到下显示的Box
    //使用JScrollPance作为普通组件的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()
    {
     public void actionPerformed(ActionEvent e)
     {
       ta.append("用户单击了“新建”菜单\n");
      }
     });
     //为file菜单添加菜单项
    file.add(newItem);
    file.add(saveItem);
    file.add(exitItem);
    
    //为exit菜单添加菜单项
    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菜单组合到eidt菜单中,从而形成二级菜单
    edit.add(format);
    //将file、edit菜单添加到mb菜单条中
    mb.add(file);
    mb.add(edit);
    //为f窗口设置菜单条
    f.setJMenuBar(mb);
    
    //------下面开始组合右键菜单,并安装右键菜单-----------------
    flavorGroup.add(metalItem);
    flavorGroup.add(nimbusItem);
    flavorGroup.add(windowsItem);
    flavorGroup.add(classicItem);
    flavorGroup.add(motifyItem);
    
    pop.add(metalItem);
    pop.add(nimbusItem);
    pop.add(windowsItem);
    pop.add(classicItem);
    pop.add(motifyItem);
    
    //为5个风格菜单创建事件监听器
    ActionListener flavorListener = new ActionListener()
    {
     public void actionPerformed(ActionEvent e)
      {
        try{
       switch(e.getActionCommand())
         {
           case "Metal风格":
             changeFlavor(1);
             break;
           case "Nimbus风格":
             changeFlavor(2);
             break;
           case "Windows风格":
             changeFlavor(3);
             break;
           case "Windows经典风格":
             changeFlavor(4);
             break;
           case "Motif风格":
             changeFlavor(5);
             break;
          }        
        }
        catch(Exception ee)
        {
          ee.printStackTrace();
         }
       }
     };
     
     //为5个风格菜单项添加事件监听器
     
     metalItem.addActionListener(flavorListener);
     nimbusItem.addActionListener(flavorListener);
     windowsItem.addActionListener(flavorListener);
     classicItem.addActionListener(flavorListener);
     motifyItem.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;
       case 2:
          UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimusLoolAndFeel");
          break;
       case 3:
          UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
          break;
       case 4:
          UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
          break;
       case 5:
          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)
   {
     new SwingComponent().init();
    }       
 }
 
 /*
 1、JRadioButton:实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。(创建一个 ButtonGroup 对象并用其 add 方法将 JRadioButton 对象包含在此组中。)
 2、ButtonGroup:  此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。
  3、JComboBox:将按钮或可编辑字段与下拉列表组合的组件。用户可以从下拉列表中选择值,下拉列表在用户请求时显示。如果使组合框处于可编辑状态,则组合框将包括用户可在其中键入值的可编辑字段。
  4、JMenuBar:菜单栏的实现。将 JMenu 对象添加到菜单栏以构造菜单。当用户选择 JMenu 对象时,就会显示其关联的 JPopupMenu,允许用户选择其上的某一个 JMenuItem。
 5、JMenuItem:菜单中的项的实现。菜单项本质上是位于列表中的按钮。当用户选择“按钮”时,则执行与菜单项关联的操作。JPopupMenu 中包含的 JMenuItem 正好执行该功能。
 6、JCheckBoxMenuItem:可以被选定或取消选定的菜单项。如果被选定,菜单项的旁边通常会出现一个复选标记。如果未被选定或被取消选定,菜单项的旁边就没有复选标记。像常规菜单项一样,复选框菜单项可以有与之关联的文本或图标,或者二者兼而有之。举例:自动换行,如果被选中,后面会出现 钩
 7、JPopupMenu:弹出菜单的实现,弹出菜单是一个可弹出并显示一系列选项的小窗口。JPopupMenu 用于用户在菜单栏上选择项时显示的菜单。它还用于当用户选择菜单项并激活它时显示的“右拉式 (pull-right)”菜单。最后,JPopupMenu 还可以在想让菜单显示的任何其他位置使用。例如,当用户在指定区域中右击时。
 8、JRadioButtonMenutItem:一个单选按钮菜单项的实现。JRadioButtonMenuItem 是属于一组菜单项中的一个菜单项,该组中只能选择一个项。被选择的项显示其选择状态。选择此项的同时,其他任何以前被选择的项都切换到未选择状态。要控制一组单选按钮菜单项的选择状态,请使用 ButtonGroup 对象。
 9、JScrollPane:提供轻量级组件的 scrollable 视图。JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。
 10、JMenu被添加到JMenuBar中,形成菜单,被添加在JMenu中,形成二级菜单;
 11、Swing菜单不允许使用add(new JMenutItem(“-”))的方式来添加菜单分隔符,只能使用addSeparator()方法来添加菜单分隔符
 */
0 0
原创粉丝点击