zoukankan      html  css  js  c++  java
  • 孔维滢 201771010110《面向对象程序设计(java)》第十四周学习总结

    实验十四  Swing图形界面组件

    1、实验目的与要求

    (1) 掌握GUI布局管理器用法;

    (2) 掌握各类Java Swing组件用途及常用API;

    2、实验内容和步骤

    实验1: 导入第12章示例程序,测试程序并进行组内讨论。

    测试程序2

    测试程序3

    测试程序4

    测试程序5

    测试程序6

    测试程序7

    测试程序9

    测试程序10

    测试程序11

    测试程序12

    测试程序13

    测试程序14

    测试程序15

    测试程序16

    实验2:组内讨论反思本组负责程序,理解程序总体结构,梳理程序GUI设计中应用的相关组件,整理相关组件的API,对程序中组件应用的相关代码添加注释。

    测试程序8:

    MenuTest.java

    package menu;
    
    import java.awt.*;
    import javax.swing.*;
    
    /**
     * @version 1.24 2012-06-12
     * @author Cay Horstmann
     */
    public class MenuTest
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() -> {
             JFrame frame = new MenuFrame();//构建一个MenuFrame类对象
             frame.setTitle("MenuTest");//设置Title属性,确定框架标题栏中的文字
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭操作,退出并关闭
             frame.setVisible(true);//设置Visible属性,组件可见
          });
       }
    }
    

      MenuFrame.java

    package menu;
    
    import java.awt.event.*;
    import javax.swing.*;
    
    /**
     * 带有示例菜单栏的框架。
     */
    public class MenuFrame extends JFrame
    {
       private static final int DEFAULT_WIDTH = 300;
       private static final int DEFAULT_HEIGHT = 200;
       private Action saveAction;//
       private Action saveAsAction;
       private JCheckBoxMenuItem readonlyItem;//用给定的readonlyItem标签构造一个复选框菜单项
       private JPopupMenu popup;//弹出菜单
    
       /**
        * 将操作名称打印到System.out的示例操作
        */
       class TestAction extends AbstractAction
       {
          public TestAction(String name)
          {
             super(name);
          }
    
          public void actionPerformed(ActionEvent event)
          {
             System.out.println(getValue(Action.NAME) + " selected.");//实现接口方法
          }
       }
    
       public MenuFrame()
       {
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    
          JMenu fileMenu = new JMenu("File");//菜单对象
          fileMenu.add(new TestAction("New"));//将TestAction对象添加到菜单中
    
          // 演示加速器
    
          JMenuItem openItem = fileMenu.add(new TestAction("Open"));
          openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));//调用setAccelerator方法将加速器键关联到一个菜单项上,使用KeyStroke类型的对象作为参数,将CTRL+O关联到OpenItem菜单项
    
          fileMenu.addSeparator();//Jmenu的一个方法将新分隔符追加到菜单的末尾。 
    
          saveAction = new TestAction("Save");
          JMenuItem saveItem = fileMenu.add(saveAction);
          saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl S"));
    
          saveAsAction = new TestAction("Save As");//将要执行的行为赋值给菜单子项
          fileMenu.add(saveAsAction);
          fileMenu.addSeparator();
    
          fileMenu.add(new TestAction("Exit")// AbstractAction或者TestAction都可以,,,因为子类继承了出构造器外的所有方法
             {
                public void actionPerformed(ActionEvent event)
                {
                   System.exit(0);
                }
             });
    
          // 演示复选框和单选按钮菜单
    
          readonlyItem = new JCheckBoxMenuItem("Read-only");//创建复选框菜单项
          readonlyItem.addActionListener(new ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   boolean saveOk = !readonlyItem.isSelected();
                   saveAction.setEnabled(saveOk);//调用setEnable方法,启用save菜单项
                   saveAsAction.setEnabled(saveOk);//调用setEnable方法,启用saveAs菜单项
                }
             });
          //将单选钮菜单项加入到按钮组中,当按钮组中的一个按钮被选中时,其他的按钮都自动的变为未选择项
          ButtonGroup group = new ButtonGroup();
    
          JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem("Insert");
          insertItem.setSelected(true);//调用setSelected方法,设置insert这个菜单项的选择状态
          JRadioButtonMenuItem overtypeItem = new JRadioButtonMenuItem("Overtype");
    
          group.add(insertItem);
          group.add(overtypeItem);
    
          // 演示图标
    
          Action cutAction = new TestAction("Cut");
          cutAction.putValue(Action.SMALL_ICON, new ImageIcon("cut.gif"));//使用关联的键设置此对象的一个属性
          Action copyAction = new TestAction("Copy");
          copyAction.putValue(Action.SMALL_ICON, new ImageIcon("copy.gif"));
          Action pasteAction = new TestAction("Paste");
          pasteAction.putValue(Action.SMALL_ICON, new ImageIcon("paste.gif"));
    
          JMenu editMenu = new JMenu("Edit");//构建一个JMenu类对象,为每一个菜单建立一个菜单对象
          editMenu.add(cutAction);
          editMenu.add(copyAction);
          editMenu.add(pasteAction);
    
          // 演示嵌套菜单
    
          JMenu optionMenu = new JMenu("Options");
    
          optionMenu.add(readonlyItem);
          optionMenu.addSeparator();
          optionMenu.add(insertItem);
          optionMenu.add(overtypeItem);
    
          editMenu.addSeparator();
          editMenu.add(optionMenu);
    
          // 说明助记符
    
          JMenu helpMenu = new JMenu("Help");
          helpMenu.setMnemonic('H');//调用setMnemonic方法,为help菜单设置快捷键
    
          JMenuItem indexItem = new JMenuItem("Index");
          indexItem.setMnemonic('I');//调用setMnemonic方法,为index菜单设置快捷键,该字符会在标签中以带下划线的形式显示
          helpMenu.add(indexItem);
    
          // 您还可以向操作添加助记符键
          Action aboutAction = new TestAction("About");
          aboutAction.putValue(Action.MNEMONIC_KEY, new Integer('A'));//把快捷键作为Action.MNEMONIC_KEY的键值添加到对象中
          helpMenu.add(aboutAction);
          
          // 将所有顶级菜单添加到菜单栏
    
          JMenuBar menuBar = new JMenuBar();
          setJMenuBar(menuBar);//调用setMenuBar方法将菜单栏添加到框架上
    
          menuBar.add(fileMenu);
          menuBar.add(editMenu);
          menuBar.add(helpMenu);
    
          // 显示弹出窗口
    
          popup = new JPopupMenu();
          popup.add(cutAction);
          popup.add(copyAction);
          popup.add(pasteAction);
    
          JPanel panel = new JPanel();
          panel.setComponentPopupMenu(popup);
          add(panel);
       }
    }

    输出结果:

    Open快捷键:Ctrl+0          Save快捷键:Ctrl+S      

    单击鼠标右键,弹出菜单。   

    相关组件API:

    创建一个菜单栏:JMenuBarmenuBar=new JMenuBar();

    调用框架的setJMenuBar方法可将一个菜单栏对 象添加到框架上:frame.setJMenuBar(menuBar);

    创建菜单对象,并将菜单对象添加到菜单栏中:JMenueditMenu=new Jmenu("Edit"); menuBar.add(editMenu);

    向菜单对象添加一个菜单项:JMenItempasteItem=new JMenItem(); editMenu.add(pasteItem);

    向菜单对象添加分隔符行:editMenu.addSeperator();

    向菜单对象项添加子菜单:JMenuoptionsMenu=new Jmenu(“option”); editMenu.add(optionsMenu);

    图标添加到一个动作上:cutAction.putValue(Action.SMALL_ICON,new ImageIcon("cut.gif"));

    单选按钮菜单项:ButtonGroup group = new ButtonGroup( );

    创建一个弹出菜单:JPopupMenupopup = new JPopupMenu();

    然后用常规方法为弹出菜单添加菜单项:JMenuItem item = new JMenuItem("Cut"); item.addActionListener(listener); popup.add(item);

    为菜单项设置快捷键:JMenuItem CutItem=new JMenuItem(" Index"); CutItem.setMnemonic(" I");此快捷键就会自动显示在菜单项中,快捷键下面 有一条下划线。

    屏蔽/启用菜单项:aMenuItem.setEnabled(boolean)

    创建弹出菜单:JPopupMenupopup = new JPopupMenu();

    显示一个弹出菜单:void show(Component c, int x,int y)

    设置弹出式触发器:component.setComponentPopupMenu(popup);

    使用SetAccelerator方法可以将加速器关联到一个菜单项:openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl o" ));

    实验总结:

    此次实验,我们组主要负责菜单这一节的学习

    首先,菜单的创建,首先创建一个菜单栏,调用框架的setJMenuBar方法可将一个菜单栏对象添加到框架上;创建菜单对象,并将菜单对象添加到菜单栏中;向菜单对象添加一个菜单项;向菜单对象添加分隔符行;向菜单对象项添加子菜单。

    其次,将菜单事件监听器插入,当用户选择菜单时,将触发一个动作事件,要为每个菜单项安装一个动作监听器,菜单对象的add方法可返回创建的子菜单项;

    然后,可以添加菜单项中的图标。

    我们还学到了单选按钮菜单项,单选按钮菜单项与普通单选按钮的工作方式一样 ,必须将它们加入的按钮组中。当按钮组中的一 个按钮被选中时,其它按钮就自动变为选择项。使用这些菜单项,不需要立即得到用户选择菜单 项的通知而是使用isSelected方法来测试。

    还有弹出菜单,如何设置弹出式触发器,让用户点击鼠标某个键时弹出菜单。

    以及快捷键的创建,为菜单项设置快捷键。在当前菜单打开的情 况下,可以按下某菜单项的快捷键,相当于鼠标单击了该菜单项。再如加速器,加速器可以在不打开菜单的情况下选中菜单项的快捷键,当用户按下加速器组合键时,就自动选择了相应的菜单项,同时激活一个动作事件。加速器只能关联在菜单项,而不能关联菜单。加速器实际上并不打开菜单,而是直接激活菜单关联 的动作事件。

    最后是启用和禁用菜单项,在程序运行过程中,经常需要屏蔽某些暂时不适用 的命令,待到条件允许时再使之重新可用。如果需要动态启用/屏蔽某菜单项,则需要为 “menu selected”事件注册监听器。

    我对于网格组布局的第十个程序还存在一些不懂的地方,希望第十组的同学可以讲解。

    通过这次小组协作的学习,我觉得相较于之前的个人学习,小组协作可以和同学交换意见,查漏补缺,虽然中间出现了一些意见不同的地方,但是我们最后还是解决了问题,而且我还发现同组的同学对于一些知识点比我掌握的更加准确,是一次很好的相互学习的机会。

  • 相关阅读:
    ORACLE学习-1.过滤和排序
    Java-net.sf.json.JSONException: java.lang.reflect.InvocationTargetException处理方法之一
    ORACLE
    java日常-com.alibaba.fastjson快速处理json字符串转成list类型
    java日常-List、Map初始值
    javaScript中获取时间
    获取select的option值及其文本
    java日常-通过年月,获取到月的第一天和最后一天
    sybase powerdesigner 16.5注册码
    05-Docker私有仓库
  • 原文地址:https://www.cnblogs.com/Weiron/p/10053683.html
Copyright © 2011-2022 走看看