1 / 94

第 5 章 构成用户界面的窗口环境

第 5 章 构成用户界面的窗口环境. 信息管理教研室 孙士兵. 构成用户界面的窗口环境. 5.1 使用 AWT(Abstract Window Toolkit) 构件 5.2 包含 构件的 构件---- 构件容器( container) 5.3 事件的传递 5.4 各种构件的应用实例 ( 一 ) 5.5 外观的管理与控制 5.6 各种构件的应用实例 ( 二 ) 5.7 总结. 5.1 使用 AWT 构件. 在 AWT 的概念中,窗口系统所显示的各种对象统称为构件: Button , Menu , List 等等都是构件。

valora
Télécharger la présentation

第 5 章 构成用户界面的窗口环境

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 构成用户界面的窗口环境 信息管理教研室 孙士兵

  2. 构成用户界面的窗口环境 • 5.1 使用AWT(Abstract Window Toolkit)构件 • 5.2 包含构件的构件----构件容器(container) • 5.3 事件的传递 • 5.4 各种构件的应用实例(一) • 5.5 外观的管理与控制 • 5.6 各种构件的应用实例(二) • 5.7 总结

  3. 5.1 使用AWT构件 • 在AWT的概念中,窗口系统所显示的各种对象统称为构件:Button,Menu,List等等都是构件。 • Component是代表构件最基本的类。 • Component类中定义了各种窗口对象中最基本、最重要的方法和性质。随时随处都有可能利用Component定义的方法。

  4. 已经学过的: getFont, handleEvent,keyUp keyDown,mouseUp, mouseDown, mouseMove, mouseEnter, mouseExit, mouseDrag, repaint setFont,resize 没有学过的: action, disable,enable, getBackground, getForeground,hide, inside,isEnable, isShowing,isVisible, locate,location, move,setBackground, setForeground,show, size 5.1 使用AWT构件

  5. 5.2 包含构件的构件----构件容器(container) 菜单 按钮 列表 窗口,对话框 container 另一个窗口 container

  6. 5.2 包含构件的构件----构件容器(container) import java.awt.*; import java.applet.Applet; public class CountClick extends Applet { int CurrentMarks=0; public init() { Button b1=new Button(“按钮”); add.b1; } } 按钮

  7. 5.2 包含构件的构件----构件容器(container) • AWT使用Container类来定义最基本的构件容器,它有两个子类:Window类和Panel类. • 在Window类还有两个子类 • 1. 定义对话框,用Dialog子类; • Java还提了一个Dialog的子类---FileDialog, 用它生成文件对话框 • 2. 定义一般意义的窗口,用Frame类.

  8. 5.2 包含构件的构件----构件容器(container) • Panel干什么用的呢? • 使你更方便的组织你的构件,得到赏心悦目的布局 • Applet是Panel的子类,因此在小应用程序里可以直接加入构件,而一般的应用程序必须先定义构件容器. • 小应用程序在浏览器中所显示的区域就是Panel,所占的尺寸就是缺省得Panel尺寸.

  9. 5.2 包含构件的构件----构件容器(container) Component Container Panel Button Applet Menu Window Frame Textfield Dialog Checkbox FileDialog

  10. 窗口 panel 按钮 5.3 事件的传递(1.02) 当动作发生在按钮上时, 首先看按钮这个类有没有action方法,如果没有则看包含按钮的容器类(即panel)有没有action方法,如果没有事件就传递窗口, 如果没有就传递给 component的通用处理方法,如果程序中没有定义任何action方法,实际上事件最终不被处理

  11. Panel ok 窗口 class MyClass extends Frame { MyPanel p=new Mypanel(); add(p); Button b=new Button(exit); add(b); boolean action() {…….;} } exit class MyPanel extends Panel { MyBtn b=new MyBtn(“ok”); add(b); boolean action() {…….;} } class MyBtn extends Button { boolean action() { …….; return true;} }

  12. 5.3事件的传递(1.02) • 事件由包含层次由内向外传递. • 每个处理事件的方法要有一个返回值,通知是否继续向上传递 boolean action(Event evt, Object arg) { ……; return true; }

  13. 窗口获面板的监听器 窗口 panel 按钮的监听器 button 5.3 事件的传递(1.1)

  14. 5.4 各种构件的应用实例--按钮 • Button类 • 功能:创建按钮事件 • 创建一个Button • Button myButton = new Button(str); • 将button放到窗口系统中: • add(new Button(“确定”); • add(new Button(“取消”); • Button类的常用方法 • getLabel setLabel 取消 确定

  15. 5.4 各种构件的应用实例--按钮 • 处理button产生的事件 • 例:创建一个按钮,每当按下它时,在屏幕显示文字(singlebutton.html) • 想一想: • 应该有哪些类? Button ,Font; • 应有哪些方法? init---建立button action---接受动作事件,调用repaint paint---显示文字

  16. 5.4 各种构件的应用实例--按钮 import java.awt.*;import java.applet.Applet; public class button extends Applet { Font font; Button b1; public void init() { font= newFont("TimesRoman",Font.BOLD,20); b1=new Button("push"); add(b1); setFont(font); }

  17. 5.4 各种构件的应用实例--按钮 • boolean action(Event evt,Object arg) • { y+=5; repaint(); • return true; • } • paint(Graphics g) • { g.drawString("Button”, 10,y);}

  18. 5.4 各种构件的应用实例--按钮 import java.awt.*;\\例:不在applet中的按钮 class ButtoninFrame { public static void main(String args[]) { Frame myframe=new Frame(); myframe.setTitle("Button in Frame"); myframe.resize(200,200); myframe.show(); Button b1=new Button("Button1"); Button b2=new Button("Button2"); myframe.add(b1);myframe.add(b2); } } .

  19. 加入 add 处理 响应 action 创建 new 5.4 各种构件的应用实例 • 一般步骤:

  20. Computer Music Sports 1 Computer Art Music Sports max start min Art 5.4 各种构件的应用实例 New TextField(20); 常用的方法 getText();setText(); setEchoCharacter(char c) new TextArea( “this is a test”,20,40); Scrollbar(VERTICAL,50,0,1,100); CheckboxGroup gr=new CheckboxGroup(); New Checkbox(label, gr, false); New Checkbox(label,gr,true); New Checkbox(label, null, false);

  21. 5.4 各种构件的应用实例--CheckBox • 应用举例 • 建立三个复选框,被选中者的标签内容变成“changes” • 应有的类:Checkbox • 应有的方法: • init:建立复选框 • action:接受动作事件 • setLabel(“*****”);

  22. 5.4 各种构件的应用实例--CheckBox import java.awt.*; public class checkbox extends java.applet.Applet { Checkbox b1,b2,b3; public void init() { b1=new Checkbox("Label1",null,false); b2=new Checkbox("Label2",null,false); b3=new Checkbox("Label3",null,false); add(b1); add(b2); add(b3); }

  23. 5.4 各种构件的应用实例--- CheckBox public boolean action(Event evt, Object arg) { if (evt.target instanceof Checkbox){ Checkbox selectedbox=(Checkbox)evt.target; String str=selectedbox.getLabel(); if (str=="Label1") selectedbox.setLabel("Chnage1"); else if (str=="Label2") selectedbox.setLabel("Chnage2"); else if (str=="Label3") selctedbox.setLabel("Change3"); } repaint();return true; }

  24. 5.4 各种构件的应用实例--- TextField • 例:在文本行中输入,并用字符串接受,显示出来 • 类的数据构成:Textfield,Button, String • 类的方法构成: • init(), • action():接受按钮事件,调用paint() • paint():用getText()方法得到输入内容,并显示.

  25. 5.4 各种构件的应用实例--- TextField import java.awt.*; public class textfieldkey extends java.applet.Applet { TextField t;String s;Button button; public void init() { t=new TextField("",25); add(t); button=new Button("getText"); add(button); }

  26. 5.4 各种构件的应用实例--- TextField public boolean action(Event evt, Object arg) { if(evt.target instanceof Button) { repaint();} return true; } public void paint(Graphics g) { s=t.getText(); g.drawString(s,40,80); }

  27. 5.5 外观的管理与制 0 0 1 3 1 2 3 4 4 4 5 5

  28. button1 button2 button3 button4 5.5 外观的管理与制 • Panel类(面板) • 功能:容纳其他对象,安排合理布局 • 创建面板: • Panel myPanel=new Panel(); • add(myPanel); • 将面板作为容器: • mypanel.add(button)

  29. import java.awt.*; public class Panel extends java.applet.Applet { Panel panel1,panel2; Button button1,button2,button3,button4; public void init() { panel1=new Panel(); panel2=new Panel(); add(panel1); add(panel2); button1=new Button("Button1"); button2=new Button("Button2"); button3=new Button("Button3"); button4=new Button("Button4"); panel1.add(button1); panel1.add(button2); panel2.add(button3); panel2.add(button4); }} 5.5 外观的管理与制 • 例:(panel.htm)

  30. 中 东 西 南 5.5 外观的管理与制 • BorderLayout类 • 功能:Applet分成五个区 • 创建 • setLayout(new BorderLayout()); • 将其他构件加入 • add(“East”, new Button(“东”); • add(“South”, new Button(“南”); • add(“West”, new Button(“西”); • add(“North”, new Button(“北”); • add(“Center”, new Button(“中”);

  31. 5.5 外观的管理与制 • FlowLayout类 • 缺省的输出管理器 • GridLayout类 • GridLayout mylayout = new • GridLayout(3,3,0,0) • setLayout(); rows cols hspace vspace

  32. 5.5 外观的管理与制 • GridBagLayout类和 • GridBagConstraints类 • 功能:借助于GridBagConstraints类,实现更灵活的外观管理 • 每个构件后都跟随一个GridBagLayout对象实体,来决定构件的外观. • 创建 • GridBagLayout myLayout=new • GridBagLayout();

  33. 5.5 外观的管理与制 • GridBagConstraints类的约束条件gridwidth, gridheight, gridx, gridy, • weightx, weighty, ipadx, ipady, insets • fill及其设置 • GridBagConstraints.NONE • GridBagConstraints.HORIZONTAL • GridBagConstraints.VERTICAL • GridBagConstraints.BOTH • GridBagConstraints.RELATIVE

  34. button1 button2 button3 button4 button5 button6 button7 button8 button9 5.5 外观的管理与制 • 例:(GridBagApplet.html)

  35. 5.5 外观的管理与制 public void init() { GridBagLayout layout=new GridBagLayout(); setLayout(layout); GridBagConstraints GBC = new GridBagConstraints(); Button button1=new Button("button1"); Button button2=new Button("button2"); Button button3=new Button("button3"); Button button4=new Button("button4"); Button button5=new Button("button5"); Button button6=new Button("button6"); Button button7=new Button("button7"); Button button8=new Button("button8"); Button button9=new Button("button9");

  36. But1 But2 But3 5.5 外观的管理与制 GBC.fill=GridBagConstraints.BOTH; (按钮可以在水平和垂直两个方向扩展) layout.setConstraints(button1,GBC); add(button1); GBC.gridwidth=GridBagConstraints.RELATIVE; (BOTH依然起作用, 紧挨着最后一个按钮,) layout.setConstraints(button2,GBC); add(button2); GBC.gridwidth=GridBagConstraints.REMAINDER; (填充剩余部分) layout.setConstraints(button3,GBC); add(button3);

  37. But1 But2 But3 But4 5.5 外观的管理与制 • GBC.gridwidth= GridBagConstraints.REMAINDER; • (表示该按钮独占一行) • layout.setConstraints(button4,GBC); • add(button4);

  38. But1 But2 But3 But4 But5 But6 5.5 外观的管理与制 • GBC.gridwidth=2; • (表示该按钮占两个单元) • layout.setConstraints(button5,GBC); • add(button5); • GBC.gridwidth= • GridBagConstraints.REMAINDER; • layout.setConstraints(button6,GBC); • add(button6);

  39. But1 But2 But3 But4 But5 But6 But7 5.5 外观的管理与制 • GBC.gridwidth=1; • GBC.gridheight=2; • (高度为两个单元) • layout.setConstraints(button7,GBC); • add(button7);

  40. But1 But2 But3 But4 But5 But6 But7 But8 But9 5.5 外观的管理与制 • GBC.gridwidth= GridBagConstraints.REMAINDER; • GBC.gridheight=1; • layout.setConstraints(button8,GBC); • add(button8); • layout.setConstraints • (button9,GBC); • add(button9);

  41. 5.6 各种构件的应用实例---Canvas • 5.6.2 Canvas类(画布) • 功能: 制作其他构件,通常用来放置图形图像,或绘图. • 画图可以直接在applet区域上进行,定义了 Canvas对象后将paint()语句作为该对象的方法,这些动作就自动发生在画布区. • 通常不需要处理画布上发生的事件 • 创建 • Canvas canvas=new Canvas(); • add(canvas);

  42. 5.6 各种构件的应用实例---Canvas • 例:根据程序说出运行结果 • 注意一个程序中生成一个canvas类的实例,另一个程序没有

  43. import java.awt.*; import java.applet.*; public class canvas_test_2 extends Applet { public void init() { setLayout(new BorderLayout()); add("North", new Button("button1")); add("South", new Button("button2")); add("West", new Button("button3")); add("East", new Button("button4")); } public void paint(Graphics g) { g.setColor(Color.red); g.fillRect(0,0,50,100); g.setColor(Color.blue); g.fillRect(30,0,100,40);} } 5.6 各种构件的应用实例---Canvas

  44. 5.6 各种构件的应用实例---Canvas import java.awt.*; import java.applet.*; public class canvas_test extends Applet { MyCanvas mycanvas=new MyCanvas(); public void init() { setLayout(new BorderLayout()); add("Center",mycanvas); add("North",new Button("button1")); ….; add("East",new Button("button4")); } }

  45. 5.6 各种构件的应用实例---Canvas class MyCanvas extends Canvas { public void paint(Graphics g) { g.setColor(Color.red); g.fillRect(0,0,50,100); g.setColor(Color.blue); g.fillRect(30,0,100,40); } }

  46. 5.6 各种构件的应用实例---Canvas

  47. 按钮接收 鼠标事件 利用输出管理 器按钮和画布 变换颜色 执行重画 5.6 各种构件的应用实例---Canvas • 例:按动鼠标改变画布的颜色(CanvasApplet) • 有哪些类? Canvas, Button, Color; • 哪些方法? init(), action(),swapColor(),paint() color color color

  48. 5.6 各种构件的应用实例---Canvas class CanvasApplet extends Applet { MyCanvas mycanvas=new MyCanvas(); public void init() { setLayout(new BorderLayout()); Button button = new Button("Color"); add("North",button); add(“Center”,mycanvas); resize(200,250); } .

  49. 5.6 各种构件的应用实例---Canvas • boolean action(Event evt, Object arg) • { • if(arg=="Color") mycanvas.swapColor(); • return true; • }

  50. class MyCanvas extends Canvas { Color color; MyCanvas() { color=Color.red; } public void paint(Graphics g) { g.setColor(color); g.fillRect(20,20,100,100); g.setColor(color.white); g.drawString("CANVAS",40,40);} public void swapColor() { if(color==Color.black) color=Color.red; else if(color==Color.red) color=Color.green; else color=Color.black; repaint(); } } 5.6 各种构件的应用实例---Canvas .

More Related