2 使用GUI控件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
金旭亮Java编程系列
14
窗体实际上包容许多面板……
2011/10/18
金旭亮Java编程系列
15
在JPanel中追加控件
PanelDemo.java
使用JLabel来给面板加上图片。
2011/10/18 金旭亮Java编程系列 16
JOptionPane也能追加各种控件
OptDemo.java:显示对话框
2011/10/18
金旭亮Java编程系列
6
陷阱揭秘
JFrame所代表的窗体,当用户点击其“关闭”按 钮时,其行为特性由以下字段决定:
private int defaultCloseOperation = HIDE_ON_CLOSE;
此字段一共有四种可选值: DO_NOTHING_ON_CLOSE、 HIDE_ON_CLOSE、 DISPOSE_ON_CLOSE、 EXIT_ON_CLOSE 使用JFrame的setDefaultCloseOperation方法 可以设置窗体关闭时的行为特性。
JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem("Insert"); insertItem.setSelected(true); JRadioButtonMenuItem overtypeItem = new JRadioButtonMenuItem("Overtype"); group.add(insertItem); group.add(overtypeItem); optionsMenu.add(insertItem); optionsMenu.add(overtypeItem);
2011/10/18 金旭亮Java编程系列
{
30
“单选”和“多选”菜单
给菜单加上“复选框”
JCheckBoxMenuItem readonlyItem = new JCheckBoxMenuItem("Readonly"); optionsMenu.add(readonlyItem);
设计“互斥”的单选菜单: ButtonGroup group = new ButtonGroup();
使用Action:
cutAction = new
AbstractAction ( "Cut", new ImageIcon("cut.gif") )
{
public void actionPerformed(ActionEvent event) // action code goes here }
}; JMenuItem cutItem = new JMenuItem(cutAction); editMenu.add(cutItem);
JMenu对象可以嵌套,以构成多级菜单。
JMenu optionsMenu = . . .; // a submenu editMenu.add(optionsMenu);
2011/10/18
金旭亮Java编程系列
28
响应菜单项的单击事件
可以使用经典的方法:
ActionListener listener = . . .; pasteItem.addActionListener(listener);
2011/10/18
金旭亮Java编程系列
21
让用户可以输入文本:JTextField
实例:TextDemo.java
2011/10/18
金旭亮Java编程系列
22
TextDemo.java分析-1
创建文本框:
JTextField jtf = new JTextField(25); JLabel jl = new JLabel("Enter your name:"); Container c = jframe.getContentPane(); c.add( jl ); c.add( jtf );
说明
默认值 最小化为图标 水平最大化 垂直最大化 最大化
9
2011/10/18
金旭亮Java编程系列
JFrame实例
1. 2.
实例:CenteredFrameTest.java 自定义图标:注意图标文件的位置 自动居中。
setIconImage方法确定窗体图标。 setSize方法确定窗体大小 setLocation方法确定窗体的位置
2011/10/18 金旭亮Java编程系列 20
JLabel
LabelDemo.java 生成带图标的标签:
ImageIcon icon = new ImageIcon("star.gif"); JLabel jl = new JLabel("You are a star", icon, JLabel.CENTER);
2011/10/18
金旭亮Java编程系列
17
创建可滚动显示的面板:JScrollPane
ScrollDemo.java
MyJPanel mjp = new MyJPanel(); JScrollPane jsp = new JScrollPane( mjp ); jsp.setPreferredSize( new Dimension(150, 150)); jframe.getContentPane().add(jsp);
也可以使用Action: Action exitAction = new AbstractAction("Exit“)
{ public void actionPerformed(ActionEvent event) { // action code goes here System.exit(0); } }; JMenuItem exitItem = new JMenuItem(exitAction); fileMenu.add(exitItem);
与绘图和GUI界面设计直接相关的是 ContentPane,通常使用以下代码框架将特定界 面组件追加到窗体上:
Container contentPane = frame.getContentPane(); Component c = . . .; contentPane.add(c);
2011/10/18
2011/10/18 金旭亮Java编程系列 25
4 菜单
创建菜单(1)
菜单的容器是JMenuBar: JMenuBar menuBar = new JMenuBar(); 需要将JMenuBar“附着到”JFrame上:
frame.setJMenuBar(menuBar);
每一个“顶层”菜单是一个JMenu对象,它需要 附着于JMenuBar JMenu editMenu = new JMenu("Edit");
Icon spicon = new ImageIcon("spam.jpg"); JLabel jl = new JLabel("Are you getting enough?", spicon, JLabel.CENTER); JOptionPane.showMessageDialog( jframe, // parent jl, // Object to display "Plenty of spam", JOptionPane.QUESTION_MESSAGE );
2011/10/18
金旭亮Java编程系列
24
复选框:JCheckBox
实例:CheckDemo.java
JCheckBox jck1 = new JCheckBox("Pepperoni"); JCheckBox jck2 = new JCheckBox("Mushroom"); JCheckBox jck3 = new JCheckBox("Black olives"); JCheckBox jck4 = new JCheckBox("Tomato"); Container c = jframe.getContentPane(); c.add( jck1 ); c.add( jck2 ); c.add( jck3 ); c.add( jck4 );
使用GUI控件
北京理工大学计算机学院 金旭亮
1 窗体
Java窗体和面板继承树
AWT组件
SWING组件
2011/10/18 金旭亮Java编程系列 3
了解窗体
显示一个空白的窗体:SimpleFrameTest.java
窗体是一个对象,从JFrame类中派生出来。
2011/10/18
金旭亮Java编程系列
注意面板是如何嵌套的!
2011/10/18 金旭亮Java编程系列 18
3 常用的“简单”GUI控件
生成带图象的按钮
ButtonDemo.java Icon spIcon = new ImageIcon("spam.jpg"); final JButton jb = new JButton("press here for Spam", spIcon);
show 方法显示窗体,
金旭亮Java编程系列 5
JDK6.0中此方法已被废弃。
2011/10/18
一个隐藏的陷阱
请在命令行运行SimpleFrameTest应用程序,同 时打开Windows的任务管理器
现在请关闭SimpleFrameTest 应用程序的主窗体,再看一下 任务管理器,发现了什么?
menuBar.add(editMenu);
2011/10/18
金旭亮Java编程系列
27
创建菜单(2)
每一个菜单项是一个JMenuItem对象,它需要 附着到JMenu JMenuItem pasteItem = new JMenuItem("Paste");
editMenu.add(pasteItem); editMenu.addSeparator();
2011/10/18
金旭亮Java编程系列
23
TextDemo.java分析-2
获取文本框中的内容: jtf.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(" you entered: " + e.getActionCommand() ); } } );
2011/10/18
金旭亮Java编程系列
29
给பைடு நூலகம்单项加上图标
经典方法:
JMenuItem cutItem = new JMenuItem("Cut",
new ImageIcon("cut.gif"));
cutItem.setHorizontalTextPosition(SwingConstants.LEFT);
2011/10/18
金旭亮Java编程系列
10
2 面板
Java窗体和面板继承树
2011/10/18
金旭亮Java编程系列
12
向窗体中加入面板
将一个JPanel对象加入到窗体中,完全采用手动定 位:TestFrameWithPanel.java
2011/10/18
金旭亮Java编程系列
13
需要特别关注的ContentPane面板
2011/10/18
金旭亮Java编程系列
8
调整窗体的大小
可以调用JFrame.pack方法让窗体自动调用大小 到刚好可以容纳其要显示的内容。 如果需要最大化窗体,调用:
frame.setExtendedState( Frame.MAXIMIZED_BOTH);
常量值
Frame.NORMAL Frame.ICONIFIED Frame.MAXIMIZED_HORIZ Frame.MAXIMIZED_VERT Frame.MAXIMIZED_BOTH
2011/10/18
金旭亮Java编程系列
7
AWT组件中的Toolkit
AWT组件包中提供了一个Toolkit类,它封装了 一些方法,通过这些方法我们可以访问“底层” 平台图形支持系统的一些功能。 比如,以下代码可获取用户屏幕的大小尺寸:
Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int screenHeight = screenSize.height; int screenWidth = screenSize.width;
4
窗体的基本使用方法
创建一个派生自JFrame的类(比如 SimpleFrame) 设计用户界面(比如向其中添加面板) 调用setVisible方法显示:
SimpleFrame frame = new SimpleFrame(); //…… frame.setVisible(true);
注意: 早期的Java代码多使用