《2022年实验六图形用户界面收集 .pdf》由会员分享,可在线阅读,更多相关《2022年实验六图形用户界面收集 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验六图形用户界面【开发语言及实现平台或实验环境】Windows2000 或 XP,JDK1.6 【实验目的】1.了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,2.了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。【实验要求】1. 掌握在 Applet 容器中添加组件的方法,掌握使用布局管理器对组件进行管理的方法。2. 理解 Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。3. 掌握编写独立运行的窗口界面的方法。4. 了解 Java Swing 组件的使用方法。5. 了解对话框的使用方法。【实验内容】一创建图形用户界面图形用户
2、界面(Graphic User Interface ,简称 GUI)是为方便用户使用设计的窗口界面,在图形用户界面中用户可以看到什么就操作什么,取代了在字符方式下知道是什么后才能操作什么的方式。组件(Component)是构成 GUI 的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container )内,容器是能容纳和排列组件的对象,如Applet 、Panel(面板)、 Frame(窗口)等。通过容器的add 方法把组件加入到容器中。1 在Applet 中添加标签、按钮并使用网格布局(1) 程序功能:在Applet 容器中添加组件标签、
3、按钮,并使用网格布局管理器排列组件在容器中的位置。(2) 编写 LX5_1.java 程序文件,源代码如下。import java.awt.*; import java.applet.Applet; public class LX5_1 extends Applet Label l1; Button b1, b2, b3, b4, b5, b6;public void init() setLayout(new GridLayout(3,3); / 设置网格布局(3 行3 列共 9 个网格)l1=new Label(标签 1); b1 = new Button(按钮 1); b2 = new B
4、utton(按钮 2); b3 = new Button(按钮 3); b4 = new Button(按钮 4); add(l1); add(b1); add(b2); add(b3); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - add(new Label(); add(b4); add(new Button(按钮 5); add( new Button(按钮 6); add(new Label(标签 2); (3)
5、编译程序 LX5_1.java 。(4) 编写显示 Applet 的页面文件 LX5_1.html ,在浏览器显示结果如图6.1 所示。2 在面板中添加组件(1) 程序功能:在Applet 中添加面板容器,并分别在Applet 、面板容器中添加组件并使用不同的布局管理方式。(2) 编写 LX5_2.java 程序文件,源代码如下。import java.awt.*; import java.awt.Color; import java.applet.Applet; public class LX5_2 extends Applet public void init() / 设置最底层的 App
6、let 容器为顺序布局setFont(new Font(Arial,Font.PLAIN,20); Label l=new Label(这是最底层的 Applet 容器中的标签 ,Label.CENTER); add(l); Panel panel1=new Panel(); add( panel1); panel1.setBackground(Color.blue); panel1.setForeground(Color.red); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
7、2 页,共 17 页 - - - - - - - - - panel1.setLayout(new BorderLayout();/设置边界布局panel1.add(North, new Button(北); panel1.add(South, new Button(南); panel1.add(East, new Button(东); panel1.add(West, new Button(西); panel1.add(Center, new Label(这是在 Panel1 面板中部添加的标签); Panel panel2=new Panel(); add( panel2); panel2
8、.setLayout(new GridLayout(3,1); /设置网格布局Choice c=new Choice ();/创建下拉式列表c.addItem(北京 ); c.addItem(上海 ); c.addItem(天津 ); Label l1=new Label(这是在 Panel2 面板中的标签); Button b1=new Button(Panel2 中的按钮 ); panel2.setBackground(Color.green); panel2.add(l1); panel2.add(b1); panel2.add(c); (3) 编译程序 LX5_2.java 。(4)
9、编写显示 Applet 的页面文件 LX5_2.html ,在浏览器显示结果如图6.2 所示。二了解事件处理机制名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - 在图形用户界面中,程序和用户的交互是通过组件响应各种事件来实现的。例如, 用户单击了一个按钮,意味着发生了按钮的单击事件;选中下拉框中的一个选项,意味着发生了一个选项事件。在Java 中能产生事件的组件叫做事件源,如按钮。如果希望对单击按钮事件进行处理,可给事件源(按钮
10、)注册一个事件监听器(如包含按钮的容器),如同签订了一个委托合同, 当事件源发生事件时,事件监听器就代替事件源对发生的事件进行处理,这就是所谓的委托事件处理机制。1单击按钮的事件处理程序(1)程序功能: 使用手工布局设置组件标签、按钮的位置, 为按钮编写单击事件处理方法。当用户用鼠标单击按钮时,会听到一声响声。(2)编写 LX5_3.java 程序文件,源代码如下。import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class LX5_3 extends Applet implements
11、ActionListener / 实现动作事件监听接口public void init() setLayout(null);/关闭默认的顺序管理布局Label l=new Label(按一下按钮可听到响声!, Label.CENTER); add(l); l.setBounds(40,10,150,30); Button b=new Button(按钮 ); add(b); b.setBounds(60,50,60,40); b.addActionListener (this); / 注册事件源的动作监听者 public void actionPerformed(ActionEvent e)
12、/实现单击事件接口的方法Toolkit.getDefaultToolkit ().beep(); /单击事件发生时作出的反应 (3)编译程序 LX5_2.java 。(4)编写显示 Applet 的页面文件 LX5_3.html ,在浏览器显示结果如图6.3 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - 2. 选择复选框和单选框按钮的事件处理程序( 1) 程序功能:在 Applte 上创建复选框、单选框、文本区域、单行
13、文本框等组件,并实现根据用户输入的10 进制数,选择不同选项可转换为2、8、16 进制数。( 2) 编写 LX5_4.java 程序文件,源代码如下。import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class LX5_4 extends Applet implements ItemListener TextArea area=new TextArea(6,30);/创建文本区String Item=2 进制 ,8 进制 ,16 进制 ,10 进制 ; Checkbox cb=new Ch
14、eckbox5; Checkbox radio=new Checkbox5; Label l=new Label(输入 10 进制数 ); TextField TF=new TextField(6);/创建单行文本框public void init() add(l);add(TF); add(area); add(new Label( 请选择进制: ); for(int i=0; i4; i+) cbi=new Checkbox(Itemi);add(cbi); cbi.addItemListener(this); CheckboxGroup cbGroup=new CheckboxGroup
15、();/创建单选框add(new Label(请选择进制: ); for(int i=0; i4; i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - radioi=new Checkbox(Itemi,cbGroup,false); add(radioi); radioi.addItemListener(this); public void itemStateChanged(ItemEvent e) int x=Inte
16、ger.parseInt(TF.getText(); if (e.getItem ()=2 进制 ) area.append (你选择的是 +e.getItem ()+ Integer.toBinaryString(x)+n); if (e.getItem ()=8 进制 ) area.append (你选择的是 +e.getItem ()+ Integer.toOctalString(x)+n); if (e.getItem ()=16 进制 ) area.append (你选择的是 +e.getItem ()+Integer.toHexString(x)+n); if (e.getItem
17、 ()=10 进制 ) area.append (你选择的是 +e.getItem ()+x+n); ( 3) 编译程序 LX5_4.java 。( 4) 编写显示 Applet 的页面文件 LX5_4.html ,在浏览器显示结果如图6.4 所示。三建立独立运行的窗口界面并使用匿名类最常使用的包含组件的容器是窗口,在Java 中窗口由 Frame 类生成。1创建一个窗口界面名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - (1
18、)程序功能:创建一个具有关闭功能的空白窗口。(2)编写 LX5_5_W.java 程序文件,源代码如下。import java.awt.*; import java.awt.event.*; public class LX5_5_W public static void main(String args) new LX5_5_W(); LX5_5_W() Frame f=new Frame(初始窗口 );/创建窗口对象f.setSize(350,200);/设置窗口大小f.setVisible(true);/设置窗口是可视的f.addWindowListener(new WindowAdapt
19、er() /为窗口添加窗口事件适配器public void windowClosing(WindowEvent e) /关闭窗口事件的方法System.exit(0); ); (3)编译并运行程序,会出现一个界面窗口如图6.5 所示。它可以最大化、最小化,单击按钮可以关闭该窗口。2在窗口中添加组件(1)程序功能:在窗口中添加组件。(2)编写 LX5_6.java 程序文件,源代码如下。import java.awt.*; import java.awt.event.*; public class LX5_6 extends Frame implements ActionListener But
20、ton btn1, btn2; TextField f,tf1,tf2; TextArea Area; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - LX5_6() super( 添加组件的窗口); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setSize(350,250)
21、; /设置窗口大小setLocation(200,200);/设置窗口显示位置setFont(new Font(Arial,Font.PLAIN,12); /设置字体setLayout(new FlowLayout(); Area=new TextArea (6,40); tf1=new TextField(10); tf2=new TextField(10); btn1=new Button(显示 ); btn2=new Button(退出 ); f=new TextField(20); add(Area); add(new Label(用户名 ); add(tf1); add(new La
22、bel(电话 ); add(tf2); add(f); add(btn1); add(btn2); tf1.addActionListener(this); tf2.addActionListener(this); btn1.addActionListener(this); btn2.addActionListener(this); show(); public static void main(String args) new LX5_6(); public void actionPerformed(ActionEvent e) if (e.getSource()=btn1) f.setTe
23、xt(你按下了“ + e.getActionCommand() + ”按钮 ); if (e.getSource()=tf1) Area.append(用户名: +tf1.getText()+n); if (e.getSource()=tf2) Area.append(电 话: +tf2.getText()+n); if (e.getSource()=btn2) for (int i=0; i100000000; i+); dispose();/只关闭当前窗口, 注销该对象 (3)编译并运行程序,界面窗口如图6.6 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
24、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - 3为窗口添加菜单(1)程序功能: 在窗口中添加菜单栏,在菜单栏添加菜单项,并添加下拉菜单和2 级菜单,通过选择菜单项可以执行不同操作,如“打开”可打开LX5_6 类生成的窗口。(2)编写 LX5_7.java 程序文件,源代码如下。import java.awt.*; import java.awt.event.*; public class LX5_7 extends Frame implements ActionListener Panel p=
25、new Panel(); Button b=new Button(退出 ); MenuBar mb=new MenuBar(); / 以下生成菜单组件对象Menu m1=new Menu(文件 ); MenuItem open=new MenuItem(打开 ); MenuItem close=new MenuItem(关闭 ); MenuItem exit=new MenuItem(退出 ); Menu m12=new Menu(编辑 ); MenuItem copy=new MenuItem(复制 ); MenuItem cut=new MenuItem(剪切 ); MenuItem pa
26、ste=new MenuItem(粘贴 ); Menu m2=new Menu(帮助 );MenuItem content=new MenuItem(目录 ); MenuItem index=new MenuItem(索引 ); MenuItem about=new MenuItem(关于 ); LX5_7() super( 添加菜单的窗口); setSize(350,200); add(South,p); p.add(b); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,
27、共 17 页 - - - - - - - - - b.addActionListener(this); m1.add(open); / 将菜单项加入到菜单m1 中m1.add(close); m1.addSeparator(); /在菜单中添加分隔条m1.add(exit); open.addActionListener(this); /给菜单项 open 注册事件监听器exit.addActionListener(this); mb.add(m1); / 将菜单 m1 加入到菜单栏 mb 中m12.add(copy); m12.add(cut); m12.add(paste); m1.add
28、(m12);/将m12 作为 2 级菜单添加到 m1 菜单项中m2.add(content); m2.add(index); m2.addSeparator(); m2.add(about); mb.add(m2); setMenuBar(mb); / 设置菜单栏为 mb show();/ 显示组件 public static void main(String args) new LX5_7(); public void actionPerformed(ActionEvent e) if (e.getActionCommand()=退出 ) System.exit(0); if (e.getA
29、ctionCommand()=打开 ) new LX5_6(); (3)编译并运行程序,界面窗口如图6.7 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - 四使用 Swing 组件在Java 中,能够实现图形用户界面的类库有两个:java.awt 和javax.swing。前者称为抽象窗口工具库AWT (Abstract Windows Toolkit),后者是 Java 基础类库 JFC(Java Foundatio
30、n Classes )的一个组成部分,它提供了一套功能更强、数量更多、更美观的图形用户界面组件。 Swing 组件名称和 AWT 组件名称基本相同,但以 J 开头, 例如AWT 按钮类的名称是 Button ,在 Swing 中的名称则是JButton 。1在 JApplet 中添加 Swing 组件(1)程序功能:在JApplet 中添加 3 个带有图片的按钮和一个带有图片的标签。(2) 准备图片文件:在当前目录下建立一个image 文件夹,存放 4 个图片文件,例如PreviousArrow.gif。(3)编写 LX5_8.java 程序文件,源代码如下。import javax.swin
31、g.*; import java.awt.*; import java.awt.Color; public class LX5_8 extends JApplet Container pane;JPanel panel1,panel2; JButton button1,button2,button3; JLabel label; public void init() pane=getContentPane(); panel1=new JPanel(new FlowLayout(); panel2=new JPanel(new FlowLayout(); ImageIcon icon = new
32、 ImageIcon(image/PreviousArrow.gif, ); button1=new JButton(icon); button2=new JButton(new ImageIcon(image/go.GIF); button3=new JButton(new ImageIcon(image/NextArrow.gif); label=new JLabel(图像标签 , new ImageIcon(image/Candl02.gif),SwingConstants.CENTER); pane.setBackground(new Color(255,255,200); panel
33、1.setBackground(new Color(255,255,104); panel2.setBackground(new Color(255,255,214); button1.setToolTipText(向上翻页按钮); button2.setToolTipText(跳转按钮 ); button3.setToolTipText(向下翻页按钮); pane.add(North,panel1); pane.add(panel2,BorderLayout.SOUTH); panel1.add(button1); panel1.add(button2); panel1.add(button
34、3); panel2.add(label); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 17 页 - - - - - - - - - (4)编译 LX5_8.java 。(5)编写显示 LX5_8.class 的页面文件。(6)使用 appletviewer 查看程序,结果如图6.8 所示。2. 在 JFrame 窗口中添加组件(1)程序功能:创建JFrame 窗口,并在其中添加工具栏。(2)准备图片文件:在当前目录下建立一个image 文件夹,存放 3 个图片文
35、件,例如PreviousArrow.gif。(3)编写 LX5_9.java 程序文件,源代码如下。import javax.swing.*; import java.awt.*; import java.awt.event.*; public class LX5_9 extends JFrame implements ActionListener JButton button1,button2,button3; JToolBar toolBar; JTextArea textArea; JScrollPane scrollPane; JPanel panel; public static v
36、oid main(String args) new LX5_9(); public LX5_9() super( 带有工具栏按钮的窗口); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 17 页 - - - - - - - - - System.exit(0); ); button1=new JButton(ne
37、w ImageIcon(image/PreviousArrow.gif); button2=new JButton(new ImageIcon(image/go.GIF); button3=new JButton(new ImageIcon(image/NextArrow.gif); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); toolBar=new JToolBar(); toolBar.add(button1); toolBar.add(
38、button2); toolBar.add(button3); textArea=new JTextArea(6,30); scrollPane=new JScrollPane(textArea); panel=new JPanel(); setContentPane(panel); panel.setLayout(new BorderLayout(); panel.setPreferredSize(new Dimension(300,150); panel.add(toolBar,BorderLayout.NORTH); panel.add(scrollPane,BorderLayout.C
39、ENTER); pack(); show(); public void actionPerformed(ActionEvent e) String s=; if (e.getSource()=button1) s= 左按钮被单击n; else if (e.getSource()=button2)s= 中按钮被单击n; else if (e.getSource()=button3) s= 右按钮被单击n; textArea.append(s); (4)编译 LX5_9.java 。(5)运行 LX5_9.class ,产生的窗口界面如图6.9 所示。名师资料总结 - - -精品资料欢迎下载 -
40、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - 五使用自定义对话框与内部类对话框是 GUI 中很常见的窗口对象,有着广泛的应用。对话框和普通窗口最大的不同就是对话框是依附在某个窗口上,一旦它所依附的窗口关闭了,对话框也要随着关闭。Java 提供了 Dialog 类用于制作自定义对话框,当需要改变一些数据或需要一个提示窗口时可使用自定义对话框。1创建自定义对话框的应用程序(1)程序功能:创建一个带有文本区及“对话框”按钮的父窗口,单击“对话框”按钮可打开一个自定义对话框,
41、从中可以定义行和列的数值,关闭对话框其设置的设置会显示在父窗口的文本区中。(2)编写 LX5_10.java 程序文件,源代码如下。import javax.swing.*; import java.awt.*; import java.awt.event.*;public class LX5_10 extends JFrame implements ActionListener int row=10, col=40; JPanel p1=new JPanel(), p2=new JPanel(); JTextArea ta=new JTextArea(文本区行数 :+row+ 列数 :+co
42、l, row, col); JScrollPane scrollPane=new JScrollPane(ta); Button exit=new Button(关闭 ); Button dialog=new Button(对话框 ); JPanel panel=new JPanel(); LX5_10() setContentPane(panel); setTitle(带有对话框的父窗口); panel.setPreferredSize(new Dimension(500,200); panel.setLayout(new BorderLayout(); panel.add(Center,
43、p1); panel.add(South, p2); p1.add(scrollPane); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - p2.add(exit); p2.add(dialog); exit.addActionListener(this); dialog.addActionListener(this); pack(); show(); /setVisible(true); public static vo
44、id main(String args) new LX5_10(); public void actionPerformed(ActionEvent e) if (e.getSource()=exit) System.exit(0); else MyDialog dlg=new MyDialog(this, true); dlg.show(); class MyDialog extends Dialog implements ActionListener Label label1=new Label(请输入行数 ); Label label2=new Label(请输入列数 ); TextFi
45、eld rows=new TextField(50); TextField columns=new TextField(50); Button OK=new Button(确定 ); Button Cancel=new Button(取消 ); MyDialog(LX5_10 parent, boolean modal) super(parent,modal); setTitle(自定义对话框); setSize(260,140); setResizable(false); setLayout(null); add(label1); add(label2); label1.setBounds(
46、50,30,65,20); label2.setBounds(50,60,65,20); add(rows); add(columns); rows.setText(Integer.toString(ta.getRows(); columns.setText(Integer.toString(ta.getColumns(); rows.setBounds(120,30,90,20); columns.setBounds(120,60,90,20); add(OK); add(Cancel); OK.setBounds(60,100,60,25); Cancel.setBounds(140,10
47、0,60,25); OK.addActionListener(this); Cancel.addActionListener(this);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 17 页 - - - - - - - - - public void actionPerformed(ActionEvent e) if(e.getSource()=OK) int row=Integer.parseInt(rows.getText(); int col=Integer.
48、parseInt(columns.getText(); ta.setRows(row); ta.setColumns(col); ta.setText(文本区行数 :+row+ 列数 :+col); show(); dispose(); 2编译并运行程序,在父窗口中单击“对话框”按钮会出现“自定义对话框”窗口,如图6.10 所示窗口。设置对话框中参数,单击“确定”按钮,可关闭自定义对话框,并可看到父窗口中出现的变化,如图6.11 所示。3程序分析:本程序包括两个类,一个是程序的主类LX5_10,另外一个是 MyDialog 类,它是Dialog (对话框)派生的子类,它是作为LX5_10 的内
49、部类创建的,内部类有一个好处就名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - 是可以随意访问主类的成员。在MyDialog 的构造方法中,以主类为父窗口调用了父类的构造方法,生成一个有模式对话框窗口。此外,MyDialog 类中采用了手工布局方式来安排各组件的位置。两个文本框用来显示和输入数值, 点击“确定” 按钮后, 用这两个数值设定主类中文本区的行列数。无论点击 “确定”还是“取消”,最后都调用dispose 方法来关闭自定义对话框。【实习题】1. 使用图形界面实现一个计算器,包括10个数字( 09)按钮和 4个运算符(加,减,乘,除)按钮,以及等号和清空两个辅助按钮,还有一个显示输入输出的文本域。本实验需上交上机报告名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -
限制150内