孔维滢 201771010110《面向对象程序设计(java)》第十四周学习总结

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”事件注册监听器。

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

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

以上是 孔维滢 201771010110《面向对象程序设计(java)》第十四周学习总结 的全部内容, 来源链接: utcz.com/z/390708.html

回到顶部