一、实验目的:
(1)掌握文本组件、按钮和单、复选按钮组件的使用。
(2)掌握列表的使用,鼠标、键盘事件的处理。
(3)掌握布局控制的方法。
二、实验内容和要求:
(1)编写一个小程序响应鼠标事件,当鼠标事件发生时,在状态条显示相应的事件信息。
(2)完成如图所示的GUI布局管理,不需要实现功能。
(3)试设计一窗口,内含一个按钮。开始运行时,按钮显示“Click Me”字样,当按钮显示为“Click Me Again”字样,再按一次,则按钮显示“Click Me”字样,依次循环。
(4)仿照Windows 2000/XP系统提供扫雷游戏编写一个类似功能和界面的扫雷程序。
(5)编写一个建议文本编译器,参考书中图形界面。
要求:包含基本的打开、保存、新建等功能,包含菜单,能够对文本的字体类型和颜色进行设置,力求界面美观。
三、实验预习:
复习本章所学内容,思考一下问题:
(1)Java语言是跨平台的编程语言,那么图形界面如何做到跨平台?
(2)AWT有哪些组件和容器?他们各自的使用方法是什么?
(3)AWT的时间处理模型是什么?原理又如何?
(4)什么是Swing?它和AWT比有什么优点?使用上有什么区别?
四、实验步骤及结果:
(1)鼠标响应事件小程序源代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ShiYan08_01 implements MouseMotionListener,MouseListener,WindowListener{
private Frame frm;
private TextField tf;
public static void main(String args[]){
ShiYan08_01 two = new ShiYan08_01 ();
two.go();
}
public void go(){
frm = new Frame("三个监听器");
frm.add(new Label("拖曳鼠标"),"North");
tf = new TextField(30);
frm.add(tf,"South");
frm.addMouseMotionListener(this);
frm.addMouseListener(this);
frm.addWindowListener(this);
frm.setSize(300,200);
frm.setVisible(true);
}
public void mouseDragged(MouseEvent e){
String s = "鼠标当前坐标: X="+e.getX()+"\tY = "+e.getY();
tf.setText(s);
}
public void mouseMoved(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){
String s = "鼠标进入了";
tf.setText(s);
}
public void mouseExited(MouseEvent e){
String s = "鼠标离开了";
tf.setText(s);
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void windowClosing(WindowEvent e){
System.exit(1);
}
public void windowOpened(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
}
实验结果:
(2)GUI布局管理器实现图形源代码:
import java.awt.*;
public class Mygui {
private Frame frm;
public Mygui(){
frm=new Frame("FileChooseDemo");
}
public void launchFrame(){
Panel p1=new Panel();
Panel p2=new Panel();
frm.add(p1,BorderLayout.CENTER);
frm.add(p2,BorderLayout.SOUTH);
Panel p11=new Panel();
Panel p12=new Panel();
Panel p13=new Panel();
Panel p14=new Panel();
p1.setLayout(new GridLayout(1,4));
p1.add(p11);
p1.add(p12);
p1.add(p13);
p1.add(p14);
Checkbox chb111=new Checkbox("open");
Checkbox chb112=new Checkbox("save",true);
Checkbox chb113=new Checkbox("custom");
CheckboxGroup grp1=new CheckboxGroup();
chb111.setCheckboxGroup(grp1);
chb112.setCheckboxGroup(grp1);
chb113.setCheckboxGroup(grp1);
TextField tf=new TextField("dialog1");
p11.setLayout(new GridLayout(4,1));
p11.add(chb111);
p11.add(chb112);
p11.add(chb113);
p11.add(tf);
Label lb1=new Label("cheng jia nan");
Label lb2=new Label("song kai le");
Checkbox chb121=new Checkbox("wang qi",true);
Checkbox chb122=new Checkbox("han fei");
CheckboxGroup grp2=new CheckboxGroup();
chb121.setCheckboxGroup(grp2);
chb122.setCheckboxGroup(grp2);
p12.setLayout(new GridLayout(4,1));
p12.add(lb1);
p12.add(lb2);
p12.add(chb121);
p12.add(chb122);
Checkbox chb131=new Checkbox("chen mei jia",false);
Checkbox chb132=new Checkbox("zeng xiao xian",true);
Checkbox chb133=new Checkbox("hu yi fei",true);
Checkbox chb134=new Checkbox("lin wan yu",true);
Checkbox chb135=new Checkbox("lu zhan bo",true);
p13.setLayout(new GridLayout(5,1));
p13.add(chb131);
p13.add(chb132);
p13.add(chb133);
p13.add(chb134);
p13.add(chb135);
Checkbox chb141=new Checkbox("qiao guan xi");
Checkbox chb142=new Checkbox("wang shi pu");
Checkbox chb143=new Checkbox("li yun ");
Checkbox chb144=new Checkbox("wang kang yi",true);
Checkbox chb145=new Checkbox("jin jia wei");
CheckboxGroup grp3=new CheckboxGroup();
chb141.setCheckboxGroup(grp3);
chb142.setCheckboxGroup(grp3);
chb143.setCheckboxGroup(grp3);
chb144.setCheckboxGroup(grp3);
chb145.setCheckboxGroup(grp3);
p14.setLayout(new GridLayout(5,1));
p14.add(chb141);
p14.add(chb142);
p14.add(chb143);
p14.add(chb144);
p14.add(chb145);
p2.setLayout(new FlowLayout());
Checkbox chb21=new Checkbox("hehe");
Checkbox chb22=new Checkbox("liujing");
Checkbox chb23=new Checkbox("niuqian",true);
CheckboxGroup grp4=new CheckboxGroup();
chb111.setCheckboxGroup(grp4);
chb112.setCheckboxGroup(grp4);
chb113.setCheckboxGroup(grp4);
Label lb3=new Label("show Flie");
p2.add(chb21);
p2.add(chb22);
p2.add(chb23);
p2.add(lb3);
frm.setSize(500,200);
frm.setVisible(true);
}
public static void main(String[] args) {
Mygui obj=new Mygui();
obj.launchFrame();
}
}
实验结果:
(3)实验程序源代码:
import java.awt.*;
import java.awt.event.*;
public class ShiYan08_03 extends Frame implements ActionListener{
int i=1;
static ShiYan08_03 frm=new ShiYan08_03();
static Button btn=new Button("Click me again!");
public static void main(String args[]){
btn.setSize(30, 40);
btn.addActionListener(frm);
frm.setLayout(new FlowLayout());
frm.setTitle("事件测试窗口");
frm.setSize(300,200);
frm.add(btn);
frm.setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(i%2!=0){
btn.setLabel("Click me!");
i++;
}
else {
btn.setLabel("Click me again!");
i++;
}
}
}
实验结果:
(4)仿照Windows 2000/XP系统提供扫雷游戏编写一个类似功能和界面的扫雷程序:
import java.awt.*;
import java.awt.event.*;
public class Saolei implements
ActionListener{
private Frame frm;
public Saolei(){
frm=new Frame("扫雷");
}
public void launchFrame(){
MenuBar
mb=new MenuBar();
Menu menu1=new Menu("游戏(G)");
Menu menu2=new Menu("帮助(H)");
MenuItem mi_new=new MenuItem("新游戏F2");
MenuItem mi_tg=new MenuItem("统计信息F4");
MenuItem mi_xx=new MenuItem("选项F5");
MenuItem mi_gg=new MenuItem("更改外观F7");
MenuItem mi_tc=new MenuItem("退出");
MenuItem mi_ck=new MenuItem("查看帮助");
MenuItem mi_gy=new MenuItem("关于扫雷");
Panel p1=new Panel();
p1.setLayout(new GridLayout(9,9));
for(int i=1;i<=81;i++){
Button btn=new Button();
btn.addActionListener(this);
p1.add(btn);
}
frm.setMenuBar(mb);
mb.add(menu1);
mb.add(menu2);
menu1.add(mi_new);
menu1.add(mi_tg);
menu1.add(mi_xx);
menu1.add(mi_gg);
menu1.add(mi_tc);
menu2.add(mi_ck);
menu2.add(mi_gy);
frm.add(p1);
frm.setSize(200,230);
frm.setVisible(true);
}
public void actionPerformed(ActionEvent e){
Button btn1=(Button)e.getSource();
btn1.setLabel("*");
}
public static void main(String[] args) {
Saolei obj=new Saolei();
obj.launchFrame();
}
}
运行结果:
(5)文本编译器源代码:
import java.awt.*;
import java.awt.event.*;
public class
ShiYan08_5 extends Frame{
private MyFiles m;
private MenuItem mi_Open,mi_New,mi_Save,mi_Close,mi_Cut,
mi_Copy,mi_Paste, mi_Select,mi_Recent;
public ShiYan08_5(){
super("Simple Text Editor");
MenuBar mb=new MenuBar();
Menu filemenu1=new Menu("Style");
Menu filemenu2=new Menu("Exit");
mi_Open=new MenuItem("Open");
mi_New=new MenuItem("New");
mi_Save=new MenuItem("Save");
mi_Cut=new MenuItem("Cut");
mi_Copy=new MenuItem("Copy");
mi_Paste=new MenuItem("Paste");
mi_Select=new MenuItem("Select All");
mi_Recent=new MenuItem("Recent Cut");
filemenu1.add(mi_Open);
filemenu1.add(mi_New);
filemenu1.add(mi_Save);
filemenu2.add(mi_Cut);
filemenu2.add(mi_Copy);
filemenu2.add(mi_Paste);
filemenu2.add( mi_Select);
filemenu2.add(mi_Recent);
mb.add(filemenu1);
mb.add(filemenu2);
setSize(300,200);
setMenuBar(mb);
setVisible(true);
}
public static void main(String args[]){
ShiYan08_5 dlg=new ShiYan08_5();
}
public
boolean action(Event e,Object o){
if (e.target instanceof MenuItem)
if(e.arg.equals(mi_Open.getLabel()))
m=new MyFiles(this,FileDialog.LOAD);
else if(e.arg.equals(mi_Save.getLabel()))
m=new MyFiles(this,FileDialog.SAVE);
return true;
}
public
boolean handleEvent(Event e){
if(e.id==Event.WINDOW_DESTROY){
setVisible(false);
dispose();
System.exit(0);
return true;
}
return super.handleEvent(e);
}
}
class MyFiles extends FileDialog{
public
MyFiles(Frame f,int type){
super(f,(type==FileDialog.LOAD?"Open":"Save")+"Dialog",type);
setSize(400,250);
setVisible(true);
}
}
实验结果:
本文档详细介绍了Java图形用户界面(GUI)编程的实验报告,包括掌握文本组件、按钮、列表和布局管理的方法。通过实现鼠标事件响应、GUI布局、按钮状态切换、扫雷游戏和文本编辑器等例子,展示了Java AWT和Swing库的应用。实验旨在提高编程能力,理解跨平台图形界面的实现,并了解AWT和Swing的组件、事件处理模型以及它们之间的差异。
4308

被折叠的 条评论
为什么被折叠?



