《实验二 图形用户界面设计.docx》由会员分享,可在线阅读,更多相关《实验二 图形用户界面设计.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验二 图形用户界面设计 实验二图形用户界面设计 一、实验目的 通过编程和上机实验,了解图形用户界面基本组件窗口、按钮、文本框、选择框等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。 二、实验要求 1掌握在窗体中添加组件的方法,掌握使用布局管理器对组件进行管理的方法。 2理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。 3掌握编写独立运行的窗口界面的方法。 三、实验内容 基本指导 图形用户界面(Graphic User Interface ,简称GUI)是为方便用户使用设计的窗口界面,在图形用户界面中用户可以看到什么就操作什么,取代
2、了在字符方式下知道是什么后才能操作什么的方式。组件(Component)是构成GUI 的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container)内,容器是能容纳和排列组件的对象,如Applet、Panel(面板)、Frame(窗口)等。通过容器的add()方法把组件加入到容器中。 Awt和swing的基本使用方法是一致的,在本实验中大部分以awt为例。 1 实现基本的登录窗口,掌握窗体以及常用组件的使用方式。 import java.awt.*; import javax.swing.*; public class LoginFra
3、me extends JFrame public LoginFrame() super(User Login); this.setSize(200,120); /设置框架尺寸 this.setLocation(300,240); this.setLayout(new FlowLayout(); /框架流布局,居中 this.add(new Label(userid); /创建标签,添加到框架上 this.add(new TextField(user1,10); /创建文本行 this.add(new Label(password); this.add(new TextField(10); /创
4、建20列的文本行 this.add(new Button(Ok); /创建按钮 this.add(new Button(Cancel); this.setVisible(true); /显示框架 public static void main(String arg) new LoginFrame(); 2 编程实现简单的标签、按钮组件,实现点击按钮,改变标签的功能。 import java.awt.*; import java.awt.event.*; class LX51 extends Frame implements ActionListener /声明类实现ActionListener
5、接口,是ActionEvent事件的监听者 Label prompt ; /声明标签 Button btn; /声明按钮 LX51() super(LX51); this.setSize(320,120); this.setBackground(Color.blue); this.setLocation(300,240); this.setLayout(new FlowLayout(FlowLayout.LEFT); / prompt =new Label(你好); btn =new Button(操作); add(prompt); add(btn); btn.addActionListene
6、r(this); /btn注册给监听者 this.setVisible(true); public void actionPerformed(ActionEvent e) /用户单击btn时系统自动调用本方法 if(prompt.getText()=你好) prompt.setText(再见); else prompt.setText(你好); public static void main(String arg) new LX51(); 编译运行程序,并思考如下问题: 1)组件如何创建? 2)具有事件处理功能的类有什么特点? 3)如何把组件注册给监听者? 尝试修改程序利用单独的类作为事件监听
7、器。 3、创建一个具有关闭功能的空白窗口界面。它可以最大化、最小化,单击按钮可以关闭该窗口。 import java.awt.*; import java.awt.event.*; class MyFrame extends Frame public MyFrame() setTitle(测试适配器类); setSize(300, 200); addWindowListener(new MyWindowAdapter(); class MyWindowAdapter extends WindowAdapter public void windowClosing(WindowEvent even
8、t) System.exit(0); public static void main(String args) MyFrame frm = new MyFrame(); frm.setVisible(true); 4编写独立窗口程序,在窗口中添加常用组件。注意在本例中addWindowListener(new WindowAdapter() 中采用的是匿名内部类,尝试与第二题比较。这在java界面设计中是非常常用的。 import java.awt.*; import java.awt.event.*; public class LX56 extends Frame implements Ac
9、tionListener Button btn1, btn2; TextField f,tf1,tf2; TextArea Area; LX56() super(添加组件的窗口); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setSize(350,250); /设置窗口大小 setLocation(200,200);/设置窗口显示位置 setFont(new Font(Arial,Font.PLAIN,12); /设置字体setLayout(
10、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 Label(电话); add(tf2); add(f); add(btn1); add(btn2); tf1.addActionListener(this); tf2.addActionListe
11、ner(this); btn1.addActionListener(this); btn2.addActionListener(this); show(); public static void main(String args) new LX56(); public void actionPerformed(ActionEvent e) if (e.getSource()=btn1) f.setText(你按下了 + e.getActionCommand() + 按钮); if (e.getSource()=tf1) Area.append(用户名:+tf1.getText()+n); if
12、 (e.getSource()=tf2) Area.append(电话:+tf2.getText()+n); if (e.getSource()=btn2) dispose();/只关闭当前窗口,注销该对象 思考:1)独立窗口程序所实现的类是哪个? 2)布局管理器的使用情况? 3)事件处理情况? 5编程在独立窗口中添加菜单栏,在菜单栏添加菜单项,并添加下拉菜单和2 级菜单。 import java.awt.*; import java.awt.event.*; public class LX57 extends Frame implements ActionListener Panel p=n
13、ew 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 paste=new
14、MenuItem(粘贴); Menu m2=new Menu(帮助); LX57() super(添加菜单的窗口); setSize(350,200); add(South,p); p.add(b); b.addActionListener(this); m1.add(open); / 将菜单项加入到菜单m1 中 m1.add(close); m1.addSeparator(); /在菜单中添加分隔条 m1.add(exit); open.addActionListener(this); /给菜单项open 注册事件监听器 exit.addActionListener(this); mb.ad
15、d(m1); / 将菜单m1 加入到菜单栏mb 中 m12.add(copy); m12.add(cut); m12.add(paste); m1.add(m12);/将m12 作为2 级菜单添加到m1 菜单项中 mb.add(m2); setMenuBar(mb); / 设置菜单栏为mb show();/ 显示组件 public static void main(String args) new LX57(); public void actionPerformed(ActionEvent e) if (e.getActionCommand()=退出) System.exit(0); if (e.getActionCommand()=打开) new LX56(); /打开LX56程序 思考:1)窗口菜单如何实现? 2)二级菜单的设计和菜单项的区别是什么 3)如何在菜单项中打开其他应用程序? 练习: 1、创建一个有一个文本区域和三个按钮的程序。当我们按下每个按钮时,使不同的文字显示在文本区域中。 2. 创建下面的GUI,要求在文本框中输入分数,单击“求和”按钮后在结果文本框中显示总分。