孔维滢 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”事件注册监听器。
我对于网格组布局的第十个程序还存在一些不懂的地方,希望第十组的同学可以讲解。
通过这次小组协作的学习,我觉得相较于之前的个人学习,小组协作可以和同学交换意见,查漏补缺,虽然中间出现了一些意见不同的地方,但是我们最后还是解决了问题,而且我还发现同组的同学对于一些知识点比我掌握的更加准确,是一次很好的相互学习的机会。
以上是 孔维滢 201771010110《面向对象程序设计(java)》第十四周学习总结 的全部内容, 来源链接: utcz.com/z/390708.html