Java 语言程序设计

70
1 Java 语语语语语语 语 语 [email protected]

description

Java 语言程序设计. 马 皓 [email protected]. 第五章 图形用户界面设计. 概述 事件处理 基本控制组件 布局设计 常用容器组件. 概述. 用户界面 ( User Interface). 用户与计算机系统 ( 各种程序 ) 交互的接口. Natural User Interface. Personal Assistant. Multimodal (speech, ink…). Graphical User Interface. Natural Language. Search Engines. Hyperlinks. - PowerPoint PPT Presentation

Transcript of Java 语言程序设计

Page 1: Java 语言程序设计

1

Java 语言程序设计

马 皓[email protected]

Page 2: Java 语言程序设计

2

1. 概述2. 事件处理3. 基本控制组件4. 布局设计5. 常用容器组件

第五章 图形用户界面设计

Page 3: Java 语言程序设计

3

概述 用户界面 (User Interface)

用户与计算机系统 ( 各种程序 ) 交互的接口

Page 4: Java 语言程序设计

4

GraphicalGraphicalUser InterfaceUser Interface

Natural Natural User InterfaceUser Interface

19901990GUIGUI

Multiple WindowsMultiple WindowsMenusMenus

19951995InternetInternet

HyperlinksHyperlinksSearch EnginesSearch Engines

Digital DecadeDigital DecadeXMLXML

Web ServicesWeb ServicesSmart devicesSmart devices

Natural LanguageNatural LanguageMultimodal (speech, ink…)Multimodal (speech, ink…)

Personal AssistantPersonal Assistant

Command lineCommand line

19851985PCPC

User Interface Evolution - Kai Fu Lee in 2003

Page 5: Java 语言程序设计

5

概述 Java GUI 的发展

1. AWT (Java 1.0) AWT (Abstract Window Toolkit): 抽象窗口工具包 概念设计实现 (about 1 month) 字体设计 ( 四种 ), 界面显示 ( 二流水准 )

2. Swing (Lightweight Components, Java 1.1) "Swing" was the code name of the project that developed

the new components Swing API ( 附加包 , Add-on package)

3. JFC (Java 2) JFC (Java Foundation Classes): Java 基础类 JFC encompass a group of features to help people build gr

aphical user interfaces (GUIs). JFC 是指包含在 Java 2 平台内的一整套图形和用户界面技术 JFC was first announced at the 1997 JavaOne developer c

onference

Page 6: Java 语言程序设计

6

概述 JFC (Java Foundation Classes)

1. AWT (Abstract Window Toolkit) 一些用户界面组件 (Component) 事件响应模型 (Event-handling model) 布局管理器 (Layout manager) 绘图和图形操作类 , 如 Shape 、 Font 、 Color 类等

2. Swing Components (Swing 组件 , JFC 的核心 ) a set of GUI components with a pluggable look and feel

( 包括已有的 AWT 组件 (Button 、 Scrollbar 、 Label 等 )和更高层的组件 ( 如 tree view 、 list box 、 tabbed panes等 )

The pluggable look and feel lets you design a single set of GUI components that can automatically have the look and feel of any OS platform (Microsoft Windows, Solaris, Macintosh).

基于 Java 1.1 Lightweight UI Framework

Page 7: Java 语言程序设计

7

概述 JFC (Java Foundation Classes)

3. Java 2D (advanced 2D graphics and imaging) Graphics? Imaging?

4. Print Service 打印文档、图形、图像 设定打印属性和页面属性 发现打印机 (IPP, Internet Printing Protocol)

Page 8: Java 语言程序设计

8

概述 JFC (Java Foundation Classes)

5. Input Method Framework text editing components to communicate with input met

hods and implement a well-integrated text input user interface

用 Java 语言开发输入法6. Accessibility: 辅助功能 , 帮助伤残人士

screen readers, speech recognition systems, refreshable braille displays

7. Drag & Drop Drag and Drop enables data transfer both across Java pr

ogramming language and native applications, between Java programming language applications, and within a single Java programming language application.

Page 9: Java 语言程序设计

9

图形用户界面的构成 什么是组件 ?

构成图形用户界面的元素,拿来即用 用图形表示 ( 能在屏幕上显示,能和用户进行交

互 ) Button 、 Checkbox 、 Scrollbar 、 Choice 、

Frame

Page 10: Java 语言程序设计

10

图形用户界面的构成 一些特定的 Java 类

java.awt 包 javax.swing 包

容器组件 (Container): 可包含其他组件 顶层容器 : Applet, Dialog, Frame, Window 一般用途容器 : Panel, ScrollPane 特定用途容器 : InternalFrame

非容器组件 : 必须要包含在容器中 Button, Checkbox, Scrollbar, Choice, Canv

as

Page 11: Java 语言程序设计

11

图形用户界面的构成 AWT 组件 java.awt 包

Component

Button, Canvas, Checkbox, Choice, Label, List, Scrollbar

TextComponentTextArea

TextField

Container

Panel

Window

ScrollPane

Dialog

Frame

MenuComponentMenuBar

MenuItem

Page 12: Java 语言程序设计

12

图形用户界面的构成 Swing 组件 javax.swing 包

java.awt.Component |-java.awt.Container |-java.awt.Window |-java.awt.Frame |-javax.swing.JFrame java.awt.Component |-java.awt.Container |-javax.swing.JComponent

|-JComboBox, JFileChooser, JInternalFrame

JLabel, JList, JMenuBar, JOptionPane, JPanel

JPopupMenu, JProgressBar, JScrollBar JScrollPane, JSeparator, JSlider, JSpinn

er JSplitPane, JTabbedPane, JTable JTextComponent, JToolBar, JTree 等

Page 13: Java 语言程序设计

13

图形用户界面的实现1. 选取组件2. 设计布局3. 响应事件 应用原则

Swing 比 AWT 提供更全面、更丰富的图形界面设计功能

Java 2 平台支持 AWT 组件,但鼓励用 Swing组件

主要讲述 AWT 和 Swing 的图形界面设计

Page 14: Java 语言程序设计

14

图形用户界面的实现 简单实例

import javax.swing.*; import java.awt.event.*; public class HelloWorldSwing { public static void main(String[] args) { JFrame f = new JFrame(“Swing1"); JLabel label = new JLabel("Hello!"); f.getContentPane().add(label); f.addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent

e) { System.exit(0); }

}); f.setSize(200, 200); f.setVisible(true); }}

import java.awt.*; import java.awt.event.*; public class HelloWorldAWT { public static void main(String[] args) { Frame f = new Frame("AWT1"); Label label = new Label("Hello!"); f.add(label); f.addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent

e) { System.exit(0); }

}); f.setSize(200, 200); f.setVisible(true); } }

Page 15: Java 语言程序设计

15

1. 概述2. 事件处理3. 基本控制组件4. 布局设计5. 常用容器组件

第五章 图形用户界面设计

Page 16: Java 语言程序设计

16

事件处理 界面设计 ( 静态 ) 界面动起来 !

通过事件触发对象的响应机制 事件 ? 鼠标移动、鼠标点击、键盘键入等

事件处理机制 事件源 事件对象 事件监听者

如何实现1. 实现 (implements) 事件监听接口 (interface)产生

一个监听器对象 (Listener)2. 监听谁 ? 将该监听器对象注册到组件对象中3. 编写事件响应方法

Page 17: Java 语言程序设计

17

事件处理

import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Beeper extends JApplet implements ActionListener { JButton button; public void init() { button = new JButton("Click Me"); getContentPane().add(button, BorderLayout.CENTER); button.addActionListener(this); } public void actionPerformed(ActionEvent e) { System.out.println(“Click me once”); }}

java.awt.event.ActionListener (interface)public void actionPerformed(ActionEvent e)javax.swing.JButton (class)public void addActionListener(ActionListener l)

Page 18: Java 语言程序设计

18

事件处理 事件分类

Act that results in the event Listener type User clicks a button, presses Return while typing in a text field, or chooses a menu item ActionListener User closes a frame (main window) WindowListener User presses a mouse button while the cursor is over a component MouseListener User moves the mouse over a component MouseMotionListe

ner Component becomes visible ComponentListen

er Component gets the keyboard focus FocusListener Table or list selection changes ListSelectionListener

Page 19: Java 语言程序设计

19

事件处理 事件分类

1. interface java.awt.event.ActionListener public void actionPerformed(ActionEvent e)

2. interface java.awt.event.WindowListener public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e)

Page 20: Java 语言程序设计

20

事件处理 事件分类

3. interface java.awt.event.MouseListener public void mouseClicked(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e)

4. interface java.awt.event.MouseMotionListener public void mouseDragged(MouseEvent e)

Invoked when a mouse button is pressed on a component and then dragged

public void mouseMoved(MouseEvent e) Invoked when the mouse cursor has been moved onto a c

omponent but no buttons have been pushed

Page 21: Java 语言程序设计

21

事件处理 鼠标事件

public class MouseEventDemo ... implements MouseListener { ... //Register for mouse events on blankArea(TextArea) and applet blankArea.addMouseListener(this);

… } public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: “ + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; # of clicks: "+ e.getClickCount(), e); } public void mouseEntered(MouseEvent e) { saySomething("Mouse entered", e); } public void mouseExited(MouseEvent e) { saySomething("Mouse exited", e); } public void mouseClicked(MouseEvent e) { saySomething("Mouse clicked (# of clicks: “ + e.getClickCount() + ")", e);

} void saySomething(String eventDescription, MouseEvent e) { textArea.append(eventDescription + " detected on “ + e.getComponent().getClass().getName() + "." + newline); }}

Page 22: Java 语言程序设计

22

事件处理 多个监听器 (Listener)多个组件

public class MultiListener ... implements ActionListener { ... button1.addActionListener(this); button2.addActionListener(this); button2.addActionListener(new Eavesdropper(bottomTextAre

a)); } public void actionPerformed(ActionEvent e) { topTextArea.append(e.getActionCommand() + newline); }}class Eavesdropper implements ActionListener { ... public void actionPerformed(ActionEvent e) { myTextArea.append(e.getActionCommand() + newline); }}

Page 23: Java 语言程序设计

23

第五章 图形用户界面设计1. 概述2. 事件处理3. 基本控制组件4. 布局设计5. 常用容器组件

Page 24: Java 语言程序设计

24

AWT 组件 (java.awt.*)

Component

Button

Canvas

Choice

CheckBox

Label

List

TextComponent

Scrollbar

TextField

TextArea

Container ScrollPaneFrame

FileDialog

Panel

WindowDialog

Applet

Page 25: Java 语言程序设计

25

基本控制组件 使用步骤 :

创建基本控制组件类的对象,指定对象属性; 将组件对象加入到制定容器的适当位置 ( 布局

设计 ); 创建事件对象的监听者。

Swing 组件 (javax.swing.*)

Page 26: Java 语言程序设计

26

按钮和标签 按钮 (Button)

创建按钮 public Button() public Button(String label)

常用方法 public String getLabel() public void setLabel(String label) public void setActionCommand(String s) public String getActionCommand(String s)

事件响应 java.awt.event.ActionListener( 接口 ) void actionPerformed(ActionEvent e)

Page 27: Java 语言程序设计

27

按钮和标签 标签 (Label)

创建标签 public Label() public Label(String s) public Label(String s, int alignment)

常用方法 public String getText() public void setText(String s) public void setAlignment(int alignment)

事件响应 不引发事件

Page 28: Java 语言程序设计

28

使用标签的例子import java.awt.*;import java.applet.*;

public class Exam5_3 extends Applet {Label lab1, lab2;TextField text1, text2;public void init() {

lab1 = new Label(“ 输入姓名” );lab2 = new Label(“ 输入年龄” );lab1.setBackground(Color.red);lab2.setBackground(Color.green);text1 = new TextField(10);text2 = new TextField(10);add(lab1); add(text1);add(lab2);add(text2);

}}

Page 29: Java 语言程序设计

29

使用标签的例子<Html>

<Body>

<Applet code="Exam5_3.class" width=500 height=300>

</Applet>

</Body>

</Html>

Page 30: Java 语言程序设计

30

文本框和文本区 文本框 (TextField)

TextComponent 类的子类 创建文本框

public TextField() public TextField(int size) public TextField(String s) public TextField(String s, int size)

常用方法 public void setText(String s) public String getText() public void setEchochar(char c) public void setEditable(boolean b)

事件响应 java.awt.event.TextListener( 接口 ) java.awt.event.ActionListener( 接口 )

Page 31: Java 语言程序设计

31

文本框和文本区 文本区 (TextArea)

TextComponent 类的子类 创建文本区

public TextArea() public TextArea(String s) public TextArea(int rows, int columns) public TextArea(String s, int rows, int columns) public TextArea(String s, int rows, int columns, int scrollbars)

SCROLLBARS_BOTH, SCROLLBARS_NONE SCROLLBARS_VERTICAL_ONLY SCROLLBARS_HORIZONTAL_ONLY

常用方法 public void append(String s) public void insert(String s, int index) pubilc void replaceRange(String s, int start, int end)

事件响应 java.awt.event.TextListener( 接口 ) void textValueChanged(TextEvent e)

Page 32: Java 语言程序设计

32

使用文本框的例子import java.awt.*;import java.awt.event.*;import java.applet.*;public class Exam5_4 extends Applet implements ActionListener{

Label lab1, lab2, lab3;TextField text1, text2, text3;String str; int i; float f;public void init() {

lab1 = new Label(“ 输入整形数 : ”); add(lab1);text1 = new TextField(“0”, 30);text1.addActionListener(this); add(text1);lab2 = new Label(“ 输入浮点数 : ”); add(lab2);text2 = new TextField(“0.0”, 30);text2.addActionListener(this); add(text2);lab3 = new Label(“ 输入字符串 : ”); add(lab3);text3 = new TextField(“0.0”, 30);text3.addActionListener(this); add(text3);

}

Page 33: Java 语言程序设计

33

使用文本框的例子public void actionPerformed(ActionEvent e) {

i = Integer.parseInt(text1.getText());f = (Float.valueOf(text2.getText())).floatValue();str = text3.getText();repaint();

}public void paint(Graphics g) {

g.drawString(“ 整形数 =” + i, 20, 120);g.drawString(“浮点数 =” + f, 20, 150);g.drawString(“ 字符串 =” + str, 20, 180);

}}

<Html><Body><Applet code="Exam5_4.class" width=400 height=300></Applet></Body></Html>

Page 34: Java 语言程序设计

34

单复选框和列表 复选框 (Checkbox)

创建复选框 public Checkbox() public Checkbox(String s) public TextField(String s, boolean state)

常用方法 public boolean getState() public void setState(boolean b) public void setLabel(String s) public String getLabel()

事件响应 java.awt.event.ItemListener( 接口 ) void itemStateChanged(ItemEvent e)

Page 35: Java 语言程序设计

35

单复选框和列表 单选按钮组 (CheckboxGroup)

创建单选按钮组 public Checkbox(String label, boolean state, Ch

eckboxGroup group) public Checkbox(String label, CheckboxGroup

group, boolean state) 常用方法

与复选框相同 事件响应

与复选框相同

Page 36: Java 语言程序设计

36

单复选框和列表 列表 (List)

创建列表 public List() public List(int n) public List(int n, boolean b)

常用方法 public void add(String s) public void add(String s, int n) public void remove(int n) public void removeAll() public int getSelectedIndex() public String getSelectedItem()

事件响应 java.awt.event.ItemListener( 接口 ) java.awt.event.ActionListener( 接口 )

Page 37: Java 语言程序设计

37

下拉列表和滚动条 下拉列表 (Choice)

创建下拉列表 public Choice()

常用方法 public int getSelectedIndex() public String getSelectedItem() public void select(int index) public void select(String item) public void add(String s) public void add(String s, int index) public void remove(int index) public void remove(String item) public void removeAll()

事件响应 java.awt.event.ItemListener( 接口 )

Page 38: Java 语言程序设计

38

下拉列表和滚动条 滚动条 (Scrollbar)

创建滚动条 public Scrollbar(int orientation, int value, int visible, int

minimum, int maximum) 常用方法

public void setUnitIncrement(int n) public void setBlockIncrement(int n) public int getUnitIncrement() public int getBlockIncrement() public int getValue()

事件响应 java.awt.event.AdjustmentListener( 接口 ) void adjustmentValueChanged(AdjustmentEvent e)

Page 39: Java 语言程序设计

39

使用下列列表的例子import java.awt.*;import java.awt.event.*;import java.applet.*;public class Exam5_8 extends Applet implements ItemListener {

Choice cho; TextField text;public void init() {

text = new TextField(10);cho = new Choice();cho.add(“red”);cho.add(“yellow”);cho.add(“green”);cho.add(“blue”);add(cho);add(text);cho.addItemListener(this);

}public void itemStateChanged(ItemEvent e) {

if(e.getItemSelectable() == cho) { String s = cho.getSelectedItem(); text.setText(s);}

}}

Page 40: Java 语言程序设计

40

使用下列列表例子<Html>

<Body>

<Applet code="Exam5_8.class" width=400 height=300>

</Applet>

</Body>

</Html>

Page 41: Java 语言程序设计

41

画布 画布 (Canvas)

创建画布 public Canvas()

常用方法 public void setSize() public void paint(Graphics g)

事件响应 java.awt.event.MouseMotionListener( 接口 ) java.awt.event.MouseListener( 接口 ) java.awt.event.KeyListener( 接口 )

Page 42: Java 语言程序设计

42

1. 概述2. 事件处理3. 基本控制组件4. 布局设计5. 常用容器组件

第五章 图形用户界面设计

Page 43: Java 语言程序设计

43

布局管理 决定组件在界面中所处的位置和大小 六种布局管理器 (Layout Manager)

两种简单布局 java.awt.FlowLayout (JDK 1.0) java.awt.GridLayout (JDK 1.0)

两种特定用途布局 java.awt.BorderLayout (JDK 1.0) java.awt.CardLayout (JDK 1.0)

两种灵活布局 java.awt.GridBagLayout (JDK 1.0) javax.swing.BoxLayout

Page 44: Java 语言程序设计

44

布局管理 FlowLayout (java.awt.FlowLayout)

所有组件从左往右排成一行 一行排满后转到下一行从左往右排 居中、左对齐、右对齐

import java.awt.*;import javax.swing.*;public class FlowWindow extends JFrame { public FlowWindow() { Container contentPane = getContentPane(); contentPane.setLayout(new FlowLayout()); contentPane.add(new JButton("Button 1")); contentPane.add(new JButton("2")); contentPane.add(new JButton("Button 3")); contentPane.add(new JButton("Long-Named Button 4")); contentPane.add(new JButton("Button 5")); } public static void main(String args[]) { FlowWindow win = new FlowWindow(); win.setTitle("FlowLayout"); win.pack(); win.setVisible(true); }}

public void pack()Causes this Window to be sized to fit the perferred size and layouts of its subcomponents

Page 45: Java 语言程序设计

45

布局管理 GridLayout (java.awt.GridLayout)

将空间划分为由行和列组成的网格单元,每个单元放一个组件,网格单元大小相同 (宽度和高度 )

指定行数和列数

import java.awt.*;import javax.swing.*;public class GridWindow extends JFrame { public GridWindow() { Container contentPane = getContentPane(); contentPane.setLayout(new GridLayout(0,2)); contentPane.add(new JButton("Button 1")); contentPane.add(new JButton("2")); contentPane.add(new JButton("Button 3")); contentPane.add(new JButton("Long-Named Button 4")); contentPane.add(new JButton("Button 5")); } public static void main(String args[]) { GridWindow win = new GridWindow(); win.setTitle("FlowLayout"); win.pack(); win.setVisible(true); }}

public GridLayout(int rows, int cols)rows and cols can be zero, which means that any number of objects can be placed in a row or in a column

Page 46: Java 语言程序设计

46

布局管理 BorderLayout (java.awt.BorderLayout)

BorderLayout is the default layout manager for every content pane

上北、下南、左西、右东、中Container contentPane = getContentPane();//contentPane.setLayout(new BorderLayout()); contentPane.add(new JButton("Button 1 (NORTH)"),

BorderLayout.NORTH);contentPane.add(new JButton("2 (CENTER)"),

BorderLayout.CENTER);contentPane.add(new JButton("Button 3 (WEST)"),

BorderLayout.WEST);contentPane.add(new JButton("Long-Named Button 4 (SOUT

H)"),BorderLayout.SOUTH);

contentPane.add(new JButton("Button 5 (EAST)"), BorderLayout.EAST);

Page 47: Java 语言程序设计

47

布局管理 CardLayout (java.awt.CardLayout)

两个或多个组件共享相同的显示空间,在不同的时间显示不同的组件

Page 48: Java 语言程序设计

48

布局管理 GridBagLayout (java.awt.GridBagLayout)

最精细、最灵活的布局管理 将空间划分为由行和列组成的网格单元,每个单

元放一个组件,网格单元大小可以不同 (宽度和高度 )

Page 49: Java 语言程序设计

49

布局管理 BoxLayout (javax.swing.BoxLayout)

将组件放在一行或一列

JPanel jpv = new JPanel();jpv.setLayout(new BoxLayout(jpv, BoxLayout.Y_AXI

S));for(int i = 0; i < 5; i++)

jpv.add(new JButton("" + i));JPanel jph = new JPanel();jph.setLayout(new BoxLayout(jph, BoxLayout.X_AXI

S));for(int i = 0; i < 5; i++) jph.add(new JButton("" + i));Container cp = getContentPane();cp.add(BorderLayout.EAST, jpv);cp.add(BorderLayout.SOUTH, jph);

容器的嵌套( 面板的嵌套,相互包含 )

Page 50: Java 语言程序设计

50

第五章 图形用户界面设计1. 概述2. 事件处理3. 基本控制组件4. 布局设计5. 常用容器组件

Page 51: Java 语言程序设计

51

概述 容器

可包含其他组件和容器 Container 类的子类

无边框容器 : Panel, Applet 有边框容器 : Window, Frame, Dialog, FieldDialog 可自动处理滚动操作的容器 : Scrollpane

Container

ScrollPane

Frame

FileDialog

Panel Window

DialogApplet

Page 52: Java 语言程序设计

52

容器 常用方法

添加组件 : add() 获取制定的组件

getComponent(int x, int y) getComponent(int index)

从容器中移出组件 remove(Component c) remove(int index) removeAll()

设置容器布局 : setLayout()

Page 53: Java 语言程序设计

53

容器 面板 (Panel)

无边框容器 顺序布局 (FlowLayout) Applet子类

Page 54: Java 语言程序设计

54

窗口和菜单 java.awt.Window: 最顶层容器

Window(Frame f) show() BorderLayout 布局

java.awt.Frame: 有边框容器 构造方法

Frame() Frame(String title)

BorderLayout 布局 常用方法

getTitle() setTitle(String s) setVisible(boolean b) setBounds(int a, int b, int width, int height) setBackground(Color c) pack() setSize(int width, int height) dispose() add() remove()

Page 55: Java 语言程序设计

55

使用 Frame 容器的例子import java.awt.*;import java.awt.event.*;public class Exam5_18 {

public static void main(String args[]) {MyFrame mf = new MyFrame();

}}class MyFrame extends Frame implements ActionListener, MouseListener, WindowListener {

Button but; String str;String mouseClickCnt = “ 单击” ;Dimension currentPos = new Dimension();int clickCnt = 0;MyFrame() {

super(“ 我制作的窗口” );but = new Button(“ 按钮” );setLayout(new FlowLayout());add(but);but.addActionListener(this);addMouseListener(this);addWindowListener(this);pack();show();

}

Page 56: Java 语言程序设计

56

使用 Frame 容器的例子public void paint(Graphics g) {

str = “ 单击了” + clickCnt + “ 次按钮” ;g.drawString(str, 10 ,40);g.drawString(“ 鼠标” + mouseClickCnt + “ 位置 :(” + currentPos.width + “,” +

currentPos.height + “)”, 10, 70);}public void actionPerformed(ActionEvent e) {

if(e.getSource() == but) { clickCnt ++; repaint();}

}public void mouseClicked(MouseEvent e) {

currentPos.width = e.getX();currentPos.height = e.getY();if(e.getClickCount() == 1) mouseClickCnt = “ 单击” ;else mouseClickCnt = “ 双击” ;repaint();

}

Page 57: Java 语言程序设计

57

使用 Frame 容器的例子public void mousePressed(MouseEvent e) { ; }public void mouseReleased(MouseEvent e) { ; }public void mouseEntered(MouseEvent e) { ; }public void mouseExited(MouseEvent e) { ; }public void windowClosing(WindowEvent e) {

dispose(); System.exit(0);

}public void windowOpened(WindowEvent e) { ; }public void windowClosed(WindowEvent e) { ; }public void windowIconified(WindowEvent e) { ; }public void windowDeiconified(WindowEvent e) { ; }public void windowActivated(WindowEvent e) { ; }public void windowDeactivated(WindowEvent e) { ; }

}

Page 58: Java 语言程序设计

58

菜单组件 java.awt.MenuBar 类

MenuBar() setMenuBar(菜单对象 )

java.awt.Menu 类 java.awt.MenuItem 类 java.awt.CheckboxMenuItem 类 java.awt.PopupMenu 类

MenuComponent

MenuBar

CheckboxMenuItem

PopupMenu

MenuItem

Menu

Page 59: Java 语言程序设计

59

使用菜单组件的例子import java.awt.*;import java.awt.event.*;public class Exam5_19 extends Frame implements ActionListener, ItemListener {

TextField text;public Exam5_19() {

super(“ 我的菜单窗口” );setSize(300, 200);

}public void init() {

MenuBar myB = new MenuBar();setMenuBar(myB);Menu m1 = new Menu(“ 文件” );m1.add(new MenuItem(“ 打开” ));MenuItem m11 = new MenuItem(“ 保存” );m11.setEnabled(false);m1.add(m11);m1.addSeparator();m1.add(“ 退出” );m1.addActionListener(this);myB.add(m1);

Page 60: Java 语言程序设计

60

使用菜单组件的例子Menu m2 = new Menu(“ 编辑” );m2.add(“ 复制” );Menu m21 = new Menu(“ 颜色” );m21.add(“ 前景色” );m21.add(“ 背景色” );m21.addActionListener(this);m2.add(m21);m2.addSeparator();CheckboxMenuItem mycmi = new CheckboxMenuItem(“ 全选” );mycmi.addItemListener(this);m2.add(mycmi);m2.addActionListener(this);myB.add(m2);

Menu m3 = new Menu(“ 帮助” );m3.add(“ 关于” );m3.addActionListener(this);myB.setHelpMenu(m3);

text = new TextField();add(“South”, text);

}

Page 61: Java 语言程序设计

61

使用菜单组件的例子public static void main(String args[]) {

Exam5_19 myMenu = new Exam5_19();myMenu.init();myMenu.setVisible(true);

}public void itemStateChanged(ItemEvent e) {

text.setText(“ 状态改变” );}public void actionPerformed(ActionEvent e) {

text.setText(e.getActionCommand());if (e.getActionCommand() == “ 退出” ) System.exit(0);

}}

Page 62: Java 语言程序设计

62

对话框 java.awt.Dialog 类

有边框和标题,可对立使用的容器 Dialog(Frame f) Dialog(Frame f, boolean b) Dialog(Frame f, String s) Dialog(Frame f, String s, boolean b) setTitle()/getTitle() setModal()/setSize()/setVisible()

操作步骤 创建一个窗口类 创建一个对话框类 设置对话框大小 创建主类,启动和初始化窗口和对话框类

Page 63: Java 语言程序设计

63

对话框 java.awt.FileDialog 类

Dialog 类的子类 构造方法

FileDialog(Frame f) FileDialog(Frame f, String s) FileDialog(Frame f, String s, int m)

常用方法 getDirectory() setDirectory() setFile()

Page 64: Java 语言程序设计

64

关于 Swing 的设计

Page 65: Java 语言程序设计

65

界面设计 设计流程

1. 顶层容器 JFrame对象主窗口 JDialog对象二级窗口 JApplet对象 applet 程序在浏览器窗口中的显

示区域2. 内容面板

JFrame f = new JFrame(“Swing1");JLabel label = new JLabel("Hello!");f.getContentPane().add(label);

面板的嵌套 ( 面板包含面板 ) 设计布局

3. 在内容面板中添加组件

Page 66: Java 语言程序设计

66

界面设计Frame内容面板

内容面板

内容面板

TextField

Slider

Combox

TextField

Slider

Combox

Page 67: Java 语言程序设计

67

界面设计

Page 68: Java 语言程序设计

68

应用实例 应用实例—菜单的构造

JMenuBar menuBar;JMenu menu, submenu;JMenuItem menuItem;JCheckBoxMenuItem cbMenuItem;JRadioButtonMenuItem rbMenuIt

em;menuBar = new JMenuBar();

menu = new JMenu("A Menu");menuBar.add(menu);

menuItem = new JMenuItem( "A text-only menu item");menu.add(menuItem);menuItem = new JMenuItem("Both text and ico

n", new ImageIcon("images/middle.gif"));menu.add(menuItem);menuItem = new JMenuItem(new ImageIcon("images/middle.gif"));menu.add(menuItem);menu.addSeparator();

ButtonGroup group = new ButtonGroup();rbMenuItem = new JRadioButtonMenuItem( "A radio button menu item");rbMenuItem.setSelected(true);group.add(rbMenuItem);menu.add(rbMenuItem);rbMenuItem = new JRadioButtonMenuItem(

"Another one");group.add(rbMenuItem);menu.add(rbMenuItem);menu.addSeparator();

cbMenuItem = new JCheckBoxMenuItem("A check box menu item");

menu.add(cbMenuItem);cbMenuItem = new JCheckBoxMenuItem(

"Another one");menu.add(cbMenuItem);menu.addSeparator();

submenu = new JMenu("A submenu");menuItem = new JMenuItem( "An item in the submenu");submenu.add(menuItem);

menuItem = new JMenuItem("Another item");submenu.add(menuItem);menu.add(submenu);

menu = new JMenu("Another Menu");menuBar.add(menu);

Page 69: Java 语言程序设计

69

应用实例 应用实例—绘图 (java.awt.Graphics 类 )import java.awt.*;

import java.applet.Applet;public class DrawGraph extends Applet {

public void paint (Graphics g) {g.drawLine(30, 5, 40, 5);g.drawRect(40, 10, 50, 20);g.fillRect(60, 30, 70, 40);g.drawRoundRect(110, 10, 130, 50, 30,30);g.drawOval(150, 120, 70, 40);g.fillOval(190, 160, 70, 40);g.drawString("Hello", 100, 200);int[] x = {30, 50, 65, 119, 127};int[] y = {100, 140, 127, 169, 201};g.drawPolygon(x, y, 5);

}}

Page 70: Java 语言程序设计

70

第五章 结束 !