Java就业培训教程第九章 GUI(下).docx
《Java就业培训教程第九章 GUI(下).docx》由会员分享,可在线阅读,更多相关《Java就业培训教程第九章 GUI(下).docx(29页珍藏版)》请在三一办公上搜索。
1、第9章 GUI(下)9.1 常用AWT组件在上一章开始的第一个程序中,我们就用到了按钮(Button),这是最简单的组件之一了,在AWT里还有很多用于GUI设计的组件,我们现在就来了解更多的GUI组件。如图9.1所示描述了AWT中的组件及类层次关系图。图9.19.1.1 Component类Java的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。抽象类Component是所有Java GUI组件的共同父类。Component类规定了所有GUI组件的基本特性,该类中定义的方法实现了作为一个GUI组件所应具备的基本功
2、能。Java程序要显示的GUI组件必须是抽象类Component或MenuComponent的子类。9.1.2 CanvasCanvas代表屏幕上的一块空白的矩形区域,程序能够在这个部件表面绘图,也能够捕获用户的操作,产生相应的事件,Canvas可以说是具有最基本的和最简单的GUI功能的部件。当我们要设计一种自己定制的具有GUI功能的部件类,我们的这个类就可以继承Canvas,这样,我们的部件类就已经完成了GUI的基本功能,我们只需要在这个基础上增加子类部件所专有的外观和功能的相关代码就行了,我们要想绘制子类部件的外观,我们必须覆盖Canvas的paint方法。我们现在设计一个计时器部件,鼠标
3、在部件上按下时,计时器开始计时,并在部件上显示计时时间,鼠标释放时,计时器停止计时。下面是这个计时器的程序代码,其中涉及到的技巧和知识点,都在前面有过讲解,这里就不作详细解释了。程序清单:TestStopWatch.javaimport java.awt.*;import java.awt.event.*;import java.util.*;import java.text.SimpleDateFormat;class StopWatchextends Canvas implements Runnableprivate long startTime = 0;private long endT
4、ime = 0;private boolean bStart = false;public StopWatch()enableEvents(AWTEvent.MOUSE_EVENT_MASK);setSize(80,30);protected void processMouseEvent(MouseEvent e)if(e.getID() = MouseEvent.MOUSE_PRESSED)bStart = true;startTime = endTime = System.currentTimeMillis();repaint();new Thread(this).start();else
5、 if(e.getID() = MouseEvent.MOUSE_RELEASED)bStart = false;repaint();super.processMouseEvent(e);public void paint(Graphics g)SimpleDateFormat sdf= new SimpleDateFormat(HH:mm:ss); Date elapsedTime =null;tryelapsedTime= sdf.parse(00:00:00);catch(Exception e)elapsedTime.setTime(endTime - startTime + elap
6、sedTime.getTime();String display = sdf.format(elapsedTime);g.drawRect(0,0,78,28);g.fill3DRect(2,2,75,25,true);g.setColor(Color.RED);g.drawString(display,10,20);public void run()while(bStart)tryThread.sleep(500);catch(Exception e)e.printStackTrace();endTime = System.currentTimeMillis();repaint();publ
7、ic class TestStopWatchpublic static void main(String args)Frame f =new Frame(StopWatch);f.add(new StopWatch();f.setSize(200,200);f.setVisible(true);f.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););编译并运行这个程序,你一定要用鼠标按住计时器部件几秒钟,你就能看到我们期望的效果了,如图9.2所示。图9.2如果
8、你想让这个计时器部件尽可能满足更多的应用需求,你还需要增加一些功能,如允许用户设置文本的颜色,文本的大小随部件大小的改变而改变等。9.1.3 Checkbox如果你熟悉Windows的应用,对单选按钮和多选按钮一定不会陌生,这两种按钮都有选中和不选两种状态,如图9.3所示。对多选按钮来说,如果有多个这样的按钮,每个按钮之间没有制约关系,可以同时选中其中的多个。而单选按钮则要求有一组按钮,这一组按钮中同时只能有一个为选中状态。Java里提供的这个Checkbox类来建立单选按钮和多选按钮,Checkbox的使用很容易,如果要创建多选按钮,我们只要使用public Checkbox(Stringl
9、abel, booleanstate)这个构造函数来创建Checkbox对象就行了,创建多选按钮要用到两个参数,前一个是选框旁边的说明文字,后一个参数决定选框是否默认被选定。因为创建单选按单钮需要一组按钮,所以在创建单选按钮时,我们还需要指定这个按钮所属于的组,使用public Checkbox(Stringlabel,booleanstate,CheckboxGroupgroup)这个构造函数创建的就是单选按钮。其中,CheckboxGroup类对象指定了这个单选按钮所属于的组。对一般的程序来说,需要处理单选按钮和多选按钮的ItemEvent事件,从而获得用户选择的结果。处理ItemEven
10、t事件的监听器接口为ItemListener,其中只有一个itemStateChanged方法,显然,ItemEvent是一种语义事件。下面是一段创建多选按钮和单选按钮以及相关事件处理的程序代码:程序清单:TestCheckbox.javaimport java.awt.*;import java.awt.event.*;public class TestCheckbox Checkbox cb1=new Checkbox(你喜欢我吗?,true);CheckboxGroup cbg=new CheckboxGroup();Checkbox cb2=new Checkbox(喜欢,cbg,tr
11、ue);Checkbox cb3=new Checkbox(不喜欢,cbg,false);public void init()Frame f=new Frame(TestCheckBox);/创建FlowLayout布局管理器,关于布局管理器,本章后面有专门的讲解,看不明白/的读者暂时可以不去下面两句代码的作用。FlowLayout fl=new FlowLayout();f.setLayout(fl); f.add(cb1);f.add(cb2);f.add(cb3);cb1.addItemListener(new CbItemListener();cb2.addItemListener(n
12、ew CbItemListener();cb3.addItemListener(new CbItemListener();f.setBounds(0,0,300,100);f.setVisible(true);f.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););class CbItemListener implements ItemListenerpublic void itemStateChanged(ItemEvent e)Checkbox cb =
13、(Checkbox)e.getItemSelectable();if(cb.getLabel().equals(你喜欢我吗?)if(cb.getState() = true)System.out.println(我很高兴);elseSystem.out.println(我很伤心);/*else if(cb.getLabel().equals(喜欢)if(e.getStateChange() = ItemEvent.SELECTED)System.out.println(我也喜欢你);elseSystem.out.println(我也不喜欢你);*/elseCheckbox cbx =cbg.g
14、etSelectedCheckbox();if(cbx != null)System.out.println(cbx.getLabel();public static void main(String args)new TestCheckbox().init();程序运行效果如图9.3所示:图9.3如果我们用注释的程序代码来处理单选按钮,需要为每一个单选按钮都编写一段这样的代码,如果按钮的个数较多,程序就比较臃肿,但从这段注释代码中,读者可以了解到对同一问题的多种处理方式,也可以在正好有这方面的需要时参考。如果我们不想直接处理这些单选按钮的事件,而是在别的部件的事件处理代码中收集这些单选按钮的
15、选择结果。譬如,我们经常在最后单击ok按钮的事件中再去收集设置对话框上的所有部件的设置结果,我们使用类似程序中else部分的代码,就是一个不错的方法。9.1.4 ChoiceChoice类用来制作用于单选的下拉列表,用起来也比较容易,来看这段程序:程序清单:TestChoice.javaimport java.awt.*;import java.awt.event.*;public class TestChoice Choice ch=new Choice(); /创建Choice对象TestChoice()ch.add(choice1); /用add方法向列表里加入选项ch.add(choi
16、ce2); /用add方法向列表里加入选项ch.add(choice3); /用add方法向列表里加入选项FlowLayout fl=new FlowLayout();Frame f=new Frame(TestChoice);f.setLayout(fl);f.add(ch); /把列表加入到窗口f.setBounds(0,0,200,100);f.setVisible(true);f.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););public sta
17、tic void main(String args)new TestChoice(); 如图9.4所示是程序执行后展开列表的情况:图9.49.1.5 菜单一个完整的菜单系统由菜单条、菜单和菜单项组成。他们与菜单的对应关系如图9.5所示:图9.5在图中,File、Edit、Tools、Help各项叫做菜单,这些顶层菜单共同组合成菜单条,在File项的下拉菜单中New、Open等各项叫做菜单项。Java中与菜单相关的类主要有三个MenuBar(菜单条)、Menu(菜单)、MenuItem(菜单项)。 我们来看看完成图9.5的菜单系统的程序代码。程序清单:TestMenuBar.javaimport
18、 java.awt.*;import java.awt.event.*;public class TestMenuBar MenuBar menubar=new MenuBar(); /创建菜单条对象Menu fileM=new Menu(File); /创建各菜单Menu editM=new Menu(Edit); /创建各菜单Menu toolsM=new Menu(Tools); /创建各菜单Menu helpM=new Menu(Help); /创建各菜单MenuItem fileMI1=new MenuItem(New); /创建各菜单项MenuItem fileMI2=new Me
19、nuItem(Open); /创建各菜单项MenuItem fileMI3=new MenuItem(Save); /创建各菜单项CheckboxMenuItem fileMI5=new CheckboxMenuItem(Quit,true); /创建各菜单项 Menu filePrint = new Menu(print);/创建子菜单 MenuItem printM1 = new MenuItem(preview); MenuItem printM2 = new MenuItem(setting); TestMenuBar()FlowLayout fl=new FlowLayout();F
20、rame f=new Frame(TestMenuBar);f.setLayout(fl);menubar.add(fileM); /将菜单加入菜单条menubar.add(editM); menubar.add(toolsM); menubar.add(helpM); fileM.add(fileMI1); /将菜单项加入file菜单中fileM.add(fileMI2); fileM.add(fileMI3);filePrint.add(printM1);/将菜单项加入print菜单中filePrint.add(printM2);fileM.add(filePrint); /将print菜
21、单作为一个菜单项加入file菜单中fileM.addSeparator(); /将一条分割线加入菜单中fileM.add(fileMI5); /将菜单项加入菜单中f.setMenuBar(menubar); /把整个菜单系统显示在窗口中f.setBounds(0,0,250,200);f.setVisible(true);f.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););public static void main(String args)new Te
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java就业培训教程第九章 GUI下 Java 就业 培训 教程 第九 GUI
链接地址:https://www.31ppt.com/p-1877213.html