第十九讲菜单和JavaGUI综合设计
主要内容
菜单(JMenuBar、JMenu、JmenuItem) 菜单项的事件侦听处理 颜色选择器JColorChooser 文件选择器JFileChooser Swing中常用组件使用归纳 GUI程序设计相关练习 |
菜单(JMenuBar、JMenu、JmenuItem)
菜单概述
菜单的作用:给应用程序设置操作菜单。
菜单组成
JMenuItem---菜单项,直接指向一个具体的操作
JMenu---菜单,其中可加入菜单项(JMenuItem)和菜单(Jmenu)
JMenuBar----菜单栏,在其中可以加入菜单(JMenu)
JMenu |
JMenuBar |
JMenuItem |
菜单(项、栏)的构造方法
菜单类别 |
构造方法 |
菜单栏 |
JMenuBar() |
菜单 |
JMenu(String s) |
菜单项 |
JMenuItem(String s) |
菜单的组织方法
任务 |
方法 |
JMenuBarèJFrame |
JFrame对象.setJMenuBar(JMenuBar m) |
JMenuè JMenuBar |
JMenuBar对象.add(JMenu对象) |
JMenu、JmenuItem、分隔线 è JMenu |
JMenu对象.add(JMenu对象) JMenu对象.add(JmenuItem对象) JMenu对象.addSeparator(); |
一个简单的菜单示例
窗口分析
窗口中置放了一个菜单和多行文本框(不同的放置方法)
菜单分析
一个菜单栏:mb
三个菜单:file、send、config
七个菜单项:open、nnew、exit、sm、sf、fc、bc
颜色选择器JColorChooser
JColorChooser
可通过调色板进行颜色的选择,默认的调色板如图。也可以自己设定调色板中的颜色种类。
构造方法
JColorChooser():创建一调色板,初始色为白色。
JColorChooser(Color initialColor):创建一调色板,初始色可由用户指定。
常用方法
public static Color showDialog(Component component, String title, Color initialColor)
显示调色板对话框,返回用户选择的颜色Color
title——对话框标题,initialColor——初始颜色。
练习:试分析设计如下窗口。
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
class ChooseColor extends JFrame implements ActionListener{
JButton b= new JButton("Change");
JTextArea t= new JTextArea(6, 30);
ChooseColor() {
setTitle("Change Color");
setDefaultCloseOperation(3);
setBounds(300, 200,350,200);
Container c= getContentPane();
c.setLayout(new FlowLayout());
c.add(b);
c.add(new JScrollPane(t));
b.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent ac ){
}
public static void main(String args[]) throws Exception{
new ChooseColor();
}
}
文件选择器JFileChooser
JFileChooser
可用于打开、保存文件时的文件选择。
构造方法
JFileChooser()
构造文件选择器,指向用户的默认目录。
JFileChooser(File currentDirectory)
JFileChooser(String currentDirectoryPath)
构造文件选择器,指向特定目录。
常用方法
public int showDialog(Component parent, String text)
public int showOpenDialog(Component parent)
显示文件选择对话框,用户可自定义“通过按钮”文本。(默认“打开”)
public int showSaveDialog(Component parent)
显示文件保存对话框。
public File getSelectedFile()
返回所选择的文件
练习:试分析设计如下窗口。
菜单项事件的侦听处理
菜单项事件和事件处理
当用户选定菜单项时,将发生ActionEvent事件
事件处理三要点
² 安装侦听器 (implements ActionListener)
² 通过addActionListener(this)设置侦听
² 重写方法public void actionPerformed(ActionEvent e){},其中需要捕捉发生事件的菜单项,进行分别处理。
可接受事件的菜单示例
问题:修改Firstmenu.java,使菜单上除了send E-mail之外的每一个菜单项都能有恰当的响应。
事件设计分析:
² 本例处理三个菜单项选择事件
菜单项 |
事件分析 |
New |
清空文本框 |
Open |
从文件打开对话框选取文件,并导入内容到文本框 |
Send file |
从文件保存对话框选取(输入)文件名,并实现保存 |
Exit |
退出程序运行 |
Font |
字体设置 |
Forecolor |
从颜色选择对话框选取颜色,设置为文本框的前景色 |
Backcolor |
从颜色选择对话框选取颜色,设置为文本框的背景色 |
Swing中常用组件使用归纳
Swing包中的常用组件
组件名称 |
类 |
说明 |
框架 |
JFrame |
常通过继承的方法使用 用来生成GUI的Java应用程序 通常需要设置标题、尺寸、预设关闭、显示等。 加入组件时应先获取窗口的容器(getContentPane)并进行布局 |
标签 |
JLabel |
颜色、字体、内容等设定 |
文本框 |
JTextField JTextArea |
颜色、字体、内容等设定。对于多行文本框,可合成在JScrollPane中,以生成滚动条 在文本框内按回车键,将发生ActionEvent事件 |
按钮 |
JButton |
需要侦听和处理ActionEvent事件 |
面板 |
JPanel |
用以进行窗口组件的灵活布局 JPanel默认的布局方式为FlowLayout |
复选框 |
JCheckBox |
用来进行交互设置。可用复选框的isSelected()方法测试复选框有无被选中。当操作复选框时,将发生ActionEvent事件 |
单选按钮 |
JRadioButton |
需要与按钮组ButtonGroup配合使用 当操作单选按钮时,将发生ActionEvent事件 |
组合框 |
JComboBox |
用来列出多个选项,下拉时可供用户选择。可用getSelectedIndex()方法来获取用户选项的序数。其值从0开始,为-1时没有一项被选中。当用户选择时,也将激发ActionEvent事件 |
列表框 |
JList |
直接用列表的方式列出多个选项。也可用getSelectedIndex()方法来获取用户选项的序数。当用户选取时,将发生ListSelectionEvent事件。 |
滚动面板 |
JScorllPane |
可为多行文本框、列表框直接定制需要的滚动条 |
菜单项 |
JMenuItem |
直接指向操作,需要加入菜单后才可使用。当用户选取时,将发生ActionEvent事件 |
菜单 |
JMenu |
用来组织菜单项,也可包含菜单(可理解为有下层菜单的菜单项) |
菜单栏 |
JMenuBar |
可用以组织窗口的菜单。可通过setJMenuBar方法,将菜单栏嵌入到JFrame窗口 |
文件选择器 |
JFileChooser |
打开或保存文件用到,可打开文件对话框 |
颜色选择器 |
JColorChooser |
选取颜色时用到,可打开调色板,选择颜色。 |
ActionEvent事件处理框架
public class JFrameTest extends JFrame implements ActionListener{ JFrameTest(String title){ ..... JButton btn = new JButton("SampleButton");
btn.addActionListener(this);
..... }
public void actionPerformed(ActionEvent e){ /* 事件处理程序 */ ..... } public static void main(String[] args){ ...... } } |
GUI程序设计相关练习
GUI程序设计基本概念
1.下面组件中不属于swing包的是___ ____。
a.JLabel b.JFrame c.ButtonGroup d.JMenu
2.下面不属于“容器”的是____ _____。
a.文本框 b.对话框 c.窗口
3.容器可以被添加到其它容器中去。___ ____
a.正确 b.不正确
4.组件可以被添加到容器中去。____
a.正确 b.不正确
5.容器可以添加到组件中去。__ _____
a.正确 b.不正确
6.组件可以被添加到其它组件中去。__ ___
a.正确 b.不正确
7. 标签JLabel创建完毕,其上的显示信息就不能在程序中动态修改。
a. 错 b.对
8.要获得一个JLabel上显示的文本信息,应使用_________方法。
a.setText b.getText c.getContent
9.在Java语言中,复选框类名是____________。
a.JButton b.JCheckbox c.JRadioButton d.JComboBox
10.在Java语言中,单选框类名是____________。
a.JButton b.JCheckbox c.JRadioButton d.JComboBox
11. 复选框的外观是________。
a.一个小正方形 b.一个小圆形 c.一个小三角形
12.单选框的外观是________。
a.一个小正方形 b.一个小圆形 c.一个小三角形
13.组合框和列表框中第一项的项目编号(也称索引)是________。
a.0 b.1 c.-1 d.10
14.可以使用__________________方法,取得当前选择的项目的索引值。
a. getSelectedIndex() b. getItem() c. getNumber()
15.在多行文本框中________输入超过程序中定义的行数。
a.能 b.不能
16.可以使用______________来清除文本框text1中的文本。
a.text1.clearText() b.text1.setText(“”)
c.text1.deleteText() d.以上都可以
17.在程序中_______________,就能够实现多行文本框内容的自动换行。
a.不需要做任何考虑
b.textarea1.setLineWrap(true)
c.textarea1.setLineWrap(false)
d.textarea1.noWrap()
18.如果我们使用textfield1=new JTextField(“TEST”)来创建一个文本框,那么这个文本框的宽度有多大?
GUI程序设计基本操作
1)编程创建只容许了一个按钮的窗口。单击该按钮能自动更改其上文字,在没有单击它之前,按钮提示为“Click me”,在用户单击以后显示“Click n”(n为单击次数)。
2)设计如下图所示的加法器。
3)设计简单的Java记事本,如图所示。
菜单程序清单:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MenuTest extends JFrame implements ActionListener{
JMenuBar mb;
JMenu file,send,config;
JMenuItem op,ne,ex,sf,se,fc,bc;
JTextArea t;
MenuTest(){
super("My First Menu Try.");
this.setDefaultCloseOperation(3);
menuInit();
this.setJMenuBar(mb);
this.getContentPane().add(new JScrollPane(t));
this.setBounds(300,200,600,400);
this.setVisible(true);
}
void menuInit(){
mb=new JMenuBar();
file=new JMenu("File");
send=new JMenu("Send");
op=new JMenuItem("Open");
ne=new JMenuItem("New");
ex=new JMenuItem("Exit");
se=new JMenuItem("E-mail");
sf=new JMenuItem("File");
mb.add(file);
file.add(op);file.add(ne);
file.add(send);
file.addSeparator();
file.add(ex);
send.add(se);send.add(sf);
config=new JMenu("Config");
fc=new JMenuItem("Forecolor");
bc=new JMenuItem("Backcolor");
mb.add(config);
config.add(fc);
config.add(bc);
op.addActionListener(this);
ne.addActionListener(this);
sf.addActionListener(this);
ex.addActionListener(this);
fc.addActionListener(this);
bc.addActionListener(this);
t=new JTextArea();
t.setLineWrap(true);
}
public void actionPerformed(ActionEvent e){
Object o=e.getSource();
JFileChooser f=new JFileChooser();
JColorChooser cc=new JColorChooser();
if(o==ne){
t.setText("");
}
else if(o==op){
f.showOpenDialog(this);
try{
StringBuffer s=new StringBuffer();
FileReader in=new FileReader(f.getSelectedFile());
while(true){
int b=in.read();
if(b==-1)break;
s.append((char)b);
}
t.setText(s.toString());
in.close();
}
catch(Exception ee){}
}
else if(o==sf){
f.showSaveDialog(this);
try{
FileWriter out=new FileWriter(f.getSelectedFile());
out.write(t.getText());
out.close();
}
catch(Exception ee){}
}
else if(o==ex)System.exit(0);
else if(o==bc){
Color c=cc.showDialog(this,"Please select",Color.white);
t.setBackground(c);
}
else{
Color c=cc.showDialog(this,"Please select",Color.black);
t.setForeground(c);
}
}
public static void main(String[] aa){
new MenuTest();
}
}