第九章 窗口、菜单和对话框 本章的任务: 介绍图形用户界面的高级组件。这些组件包括窗口、菜单和对话框等,它们可以构造出标准GUI应用程序。最后,简要介绍Java Swing的使用方法。

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
Java程序设计 常州信息职业技术学院(CCIT) 软件学院
四資二甲 第三週作業 物件導向程式設計.
Java System Concepts and Animation Programming
第二十章 圖型介面與網路對播 (GUI and Intercross Transition) 20-1 簡介 20-2 ActionListener Interface 20-3 ActionEvent Class 20-4 Vector Class 20-5 圖型介面與視窗關閉 20-6 圖型介面與資料顯示.
視窗程式設計 2. 視窗版面配置 Chih Hung Wang Reference:
6.5 图形界面的布局设计 每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。
第11章 Java多媒体技术.
第七章 图形用户界面的设计与实现 学习导读 首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置、在窗口中显示文字和图像等;
第6章 图形用户界面设计 6.1 图形用户界面概述 6.2 GUI标准组件的使用 6.3 Java的事件处理 6.4 窗口及菜单设计
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
Ch07 介面與多重繼承 物件導向程式設計(II).
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之一).
Java语言程序设计 马 皓
Ch06 人機介面_視窗程式設計(2) 物件導向系統分析與設計.
第9章 图形用户界面(GUI)设计.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
2018/11/11 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
GUI事件处理 主讲:赖国荣 QQ:
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
JAVA语言程序设计 第9章 图形用户界面 郑 莉.
问题 Jdbc连接数据库 下载数据库的驱动 Sql server 在微软的网站上可以下载 Sqlserver for jdbc driver
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Java语言程序设计 第六部分 Java图形用户界面.
Ch07 Java Applets 物件導向系統實務.
Java程序设计 JAVA 授课教师:赵小敏 浙江工业大学 软件学院
第十一章   Swing II.
SWING 2018/11/23.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
电子商务技术基础 张宝明.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
SWT-JFace 南京大学软件学院
記事本 物件導向系統實務.
JAVA语言程序设计 第十一章 图形用户界面
記事本 物件導向系統實務.
Java程序设计 第9章 继承和多态.
JAVA 2 新觀念教本 ---邁向SCJP專業認證--- 易瓏資訊 林新德 著.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第5章 构成用户界面的窗口环境 北京大学计算机系 代亚非.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
AWT Event Model.
Ch04 事件處理 物件導向系統實務.
CH03 為自己的視窗加上小元件 物件導向系統實務.
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
第10章 高级用户界面设计 10.1 菜单设计 10.2 通用对话框 10.3 图像列表框控件 10.4 树形视图控件
高级组件GUI设计.
事件處理.
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第五章 事件处理机制 Java 事件处理机制 窗口事件 鼠标事件 键盘事件 例:ButtonTest.java.
组件 复选框(Checkbox)可以让用户进行多项选择。复选框有两种状态,分别为“开(on)”和“关(off)”。当用户点中复选框的时候,复选框的状态就会改变。 1、创建复选框 (1)声明复选框。 Checkbox mycheckbox =new Checkbox (); (2)添加复选框。将复选框组件放置到容器中。
第二章 Java语法基础.
4.6 菜单.
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
第2章 Java语言基础.
判斷(選擇性敘述) if if else else if 條件運算子.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
第二章 Java基本语法 讲师:复凡.
组件 组件是构成图形用户界面的各种元素。通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件分为容器(Container)类和非容器类组件两大类。 控制组件有Button按钮 、Checkbox复选矿、 Choice下拉列表、Label标签、List列表、textcomponent文本(TextField文本域.
Summary
Presentation transcript:

第九章 窗口、菜单和对话框 本章的任务: 介绍图形用户界面的高级组件。这些组件包括窗口、菜单和对话框等,它们可以构造出标准GUI应用程序。最后,简要介绍Java Swing的使用方法。

本章主要内容 1.窗口 2.菜单 3.对话框 4.Swing简介

9.1 窗口 Java的窗口由Frame类生成,遗憾的是它不具有关闭功能,必须要在程序中实现窗口事件监听接口并编写关闭窗口的代码才行。 9.1 窗口 Java的窗口由Frame类生成,遗憾的是它不具有关闭功能,必须要在程序中实现窗口事件监听接口并编写关闭窗口的代码才行。 本节介绍创建可关闭窗口的几种方法以及窗口的使用。

9.1.1 创建可关闭窗口 例9.1 方式1:创建一个可关闭的空白窗口,如图所示。

import java.awt.*; import java.awt.event.*; class W1 extends Frame implements WindowListener { W1() { super("Window1"); setSize(350,200); setVisible(true); addWindowListener(this); }

public void windowClosing(WindowEvent e) { 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) {} public static void main(String args[]) { new W1();

9.1.2 窗口事件适配器 例9.2 方式2:创建一个可关闭的空白窗口。 import java.awt.*; 例9.2 方式2:创建一个可关闭的空白窗口。 import java.awt.*; import java.awt.event.*; public class W2 extends Frame { W2() { super("Window2"); setSize(350,200); setVisible(true); addWindowListener(new Win());

} public static void main(String[] args) { new W2(); class Win extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0);

窗口事件适配器是为方便程序员而专门设计的类。定义 : public abstract class WindowAdapter extends Object implements WindowListener { public WindowAdapter() // 构造方法 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) // 窗口失活时调用 }

9.1.3 匿名类 例9.3 方式3:创建一个可关闭的空白窗口。 import java.awt.*; 9.1.3 匿名类 例9.3 方式3:创建一个可关闭的空白窗口。 import java.awt.*; import java.awt.event.*; public class W3 { public static void main(String[] args) { Frame f=new Frame("Window3"); f.setSize(350,200); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

9.1.4 在窗口中加入组件 例9.4 在窗口中添加按钮,点击“显示”按钮可以显示文字,点击“退出”按钮可关闭窗口,同时窗口右上角的关闭按钮也起作用。如图所示。

import java.awt.*; import java.awt.event.*; public class W4 extends Frame implements ActionListener { Button btn1, btn2; TextField f; W4() { super("Window4"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

setSize(350,200); btn1=new Button("显示"); btn2=new Button("退出"); f=new TextField(20); setLayout(new FlowLayout()); add(f); add(btn1); add(btn2); btn1.addActionListener(this); btn2.addActionListener(this); show(); }

public static void main(String args[]) { new W4(); } public void actionPerformed(ActionEvent e) { f.setText("你按下了“" + e.getActionCommand() + "”按钮"); if (e.getSource()==btn2) { for (int i=0; i<100000000; i++); System.exit(0);

9.1.5 多重窗口 例9.5 设计一个多重窗口的程序,如图所示。

import java.awt.*; import java.awt.event.*; public class W5 extends Frame implements ActionListener { Button btn; W5() { super("Window5"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

setSize(350,200); btn=new Button("打开新窗口"); setLayout(new FlowLayout()); add(btn); btn.addActionListener(this); setLocation(200, 100); show(); }

public static void main(String args[]) { new W5(); } public void actionPerformed(ActionEvent e) { new W5(); setLocation(getX()+20, getY()+20); toFront(); }

9.2 菜单 菜单是图形用户界面的重要组成部分。 由菜单条(MenuBar)、菜单(Menu)、菜单项(MenuItem)和复选菜单项(CheckboxMenuItem)等对象组成。

9.2.1 为窗口加入菜单 例9.6 在窗口中添加菜单,如图所示。

import java.awt.*; import java.awt.event.*; public class W6 extends Frame implements ActionListener { Panel p=new Panel(); Button btn=new Button("退出"); MenuBar mb=new MenuBar(); // 以下生成菜单组件对象 Menu m1=new Menu("文件"); MenuItem open=new MenuItem("打开"); MenuItem close=new MenuItem("关闭"); MenuItem exit=new MenuItem("退出");

Menu m2=new Menu("编辑"); MenuItem copy=new MenuItem("复制"); MenuItem cut=new MenuItem("剪切"); MenuItem paste=new MenuItem("粘贴"); Menu m3=new Menu("帮助"); MenuItem content=new MenuItem("目录"); MenuItem index=new MenuItem("索引"); MenuItem about=new MenuItem("关于");

W6() { super("Window6"); setSize(350,200); add("South",p); p.add(btn); btn.addActionListener(this); m1.add(open); // 将菜单项加入到菜单中 m1.add(close); m1.addSeparator(); // 将分隔条加入到菜单中 m1.add(exit); exit.addActionListener(this); // 注册菜单项的事件监听器 mb.add(m1); // 将菜单加入到菜单条中

m2.add(copy); m2.add(cut); m2.add(paste); mb.add(m2); m3.add(content); m3.add(index); m3.addSeparator(); m3.add(about); mb.add(m3);

setMenuBar(mb); // 显示菜单条 show(); } public static void main(String args[]) { new W6(); public void actionPerformed(ActionEvent e) { if (e.getActionCommand()=="退出") System.exit(0);

9.2.2 菜单综合应用 例9.7 菜单综合应用,如图所示。

import java.awt.*; import java.awt.event.*; public class W7 extends Frame implements ActionListener, ItemListener{ TextField msg=new TextField(); MenuBar mb=new MenuBar(); Menu m1=new Menu("菜单"); Menu m2=new Menu("二级菜单"); MenuItem item=new MenuItem("普通菜单项", new MenuShortcut('p')); CheckboxMenuItem checkbox=new CheckboxMenuItem("复选菜单项"); MenuItem exit=new MenuItem("退出");;

W7() { setTitle("菜单综合应用"); setSize(350,200); add(msg); mb.add(m1); m1.add(m2); // 将二级菜单m2加入到m1中 checkbox.setState(true); // 设定复选菜单项为选中 m1.add(item); m1.add(checkbox); m1.addSeparator(); m1.add(exit); m2.add("菜单项A"); // 为二级菜单m2加入菜单项 m2.add("菜单项B");

item.addActionListener(this); // 注册事件监听器 checkbox.addItemListener(this); exit.addActionListener(this); setMenuBar(mb); // 显示菜单 show(); // 显示窗口 } public void actionPerformed(ActionEvent e) { if (e.getSource()==exit) System.exit(0); else msg.setText(e.getActionCommand()+"被打开");

public void itemStateChanged(ItemEvent e) { if (e.getSource()==checkbox) if (checkbox.getState()) msg.setText(checkbox.getLabel()+"被选中"); else msg.setText(checkbox.getLabel()+"被取消"); } public static void main(String arg[]) { new W7();

9.2.3 弹出式菜单 弹出式菜单是一种非常方便的菜单工具,它平常依附在某个容器或组件上并不显现出来,当用户点击鼠标右键时它就会弹出来。

例9.8 弹出式菜单应用,如图所示。

import java.awt.*; import java.awt.event.*; public class W8 extends Frame implements ActionListener, MouseListener { TextArea msg=new TextArea(); PopupMenu pm=new PopupMenu(); MenuItem item1=new MenuItem("复制"); MenuItem item2=new MenuItem("剪切"); MenuItem item3=new MenuItem("粘贴");

W8() { setTitle("弹出式菜单"); setSize(350,200); addWindowListener(new WindowAdapter() { // 注册窗口的事件监听器 public void windowClosing(WindowEvent e) { System.exit(0); } } ); add(msg); msg.add(pm); // 将弹出式菜单加入到文本区中 pm.add(item1); pm.add(item2); pm.add(item3);

item1.addActionListener(this); msg.addMouseListener(this); // 注册文本区的鼠标事件监听器 show(); } public void actionPerformed(ActionEvent e) { msg.append("你选择了"+e.getActionCommand()+"\n");

public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) // 判断是否按下鼠标右键 pm.show(this, e.getX(), e.getY()); // 显示弹出式菜单 } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public static void main(String arg[]) { new W8();

9.3 对话框 对话框是GUI中很常见的窗口对象,有着广泛的应用。 9.3 对话框 对话框是GUI中很常见的窗口对象,有着广泛的应用。 对话框和普通窗口最大的不同就是对话框是依附在某个窗口上,一旦它所依附的窗口关闭了,对话框也要随着关闭。

9.3.1 自定义对话框 Dialog有7个构造方法: ☆Dialog(Dialog owner) ☆ Dialog(Dialog owner, String title) ☆ Dialog(Dialog owner, String title, boolean modal) ☆ Dialog(Frame owner) ☆ Dialog(Frame owner, boolean modal) ☆ Dialog(Frame owner, String title) ☆ Dialog(Frame owner, String title, boolean modal)

9.3.2 创建自定义对话框实例 例9.9 建立一个自定义对话框,如下两 图。

import java.awt.*; import java.awt.event.*; public class W9 extends Frame implements ActionListener { int row=6, col=40; Panel p1=new Panel(), p2=new Panel(); TextArea ta=new TextArea("文本区行数:"+row+" 列数:"+col, row, col); Button exit=new Button("退出"), dialog=new Button("对话框");

W9() { setTitle("对话框的父窗口"); setSize(350,200); add("Center", p1); add("South", p2); p1.add(ta); p2.add(exit); p2.add(dialog); exit.addActionListener(this); dialog.addActionListener(this); setVisible(true); }

public static void main(String args[]) { new W9(); } public void actionPerformed(ActionEvent e) { if (e.getSource()==exit) System.exit(0); else { MyDialog dlg=new MyDialog(this, true); dlg.show();

class MyDialog extends Dialog implements ActionListener { Label label1=new Label("请输入行数"); Label label2=new Label("请输入列数"); TextField rows=new TextField(50); TextField columns=new TextField(50); Button OK=new Button("确定"); Button Cancel=new Button("取消");

MyDialog(W9 parent, boolean modal) { super(parent,modal); setTitle("自定义对话框"); setSize(260,140); setResizable(false); setLayout(null); add(label1); add(label2); label1.setBounds(50,30,65,20); label2.setBounds(50,60,65,20);

add(rows); add(columns); rows.setText(Integer.toString(ta.getRows())); columns.setText(Integer.toString(ta.getColumns())); rows.setBounds(120,30,90,20); columns.setBounds(120,60,90,20); add(OK); add(Cancel); OK.setBounds(60,100,60,25); Cancel.setBounds(140,100,60,25); OK.addActionListener(this); Cancel.addActionListener(this); }

public void actionPerformed(ActionEvent e) { if(e.getSource()==OK) { int row=Integer.parseInt(rows.getText()); int col=Integer.parseInt(columns.getText()); ta.setRows(row); ta.setColumns(col); ta.setText("文本区行数:"+row+" 列数:"+col); } dispose();

9.4 Swing简介 Swing 的功能: ·Swing按钮类和标签类除了显示文本标题外还可以显示图像标题。 ·Swing组件能自动适应操作系统的外观,而AWT组件总是保持相同外观。 ·Swing组件不一定非得是矩形的,可以把按钮设计成圆形。 ·可以调用Swing组件的方法改变其外观和行为。

9.4.1 Swing按钮与标签 例9.10 图像按钮与图像标签应用,如图所示。

import javax.swing.*; import java.awt.*; import java.awt.Color; public class W11 extends JApplet { Container pane; JPanel panel1,panel2; JButton button1,button2,button3; JLabel label;

public void init() { pane=getContentPane(); panel1=new JPanel(new FlowLayout()); panel2=new JPanel(new FlowLayout()); ImageIcon icon = new ImageIcon("PreviousArrow.gif"," "); button1=new JButton(icon); button2=new JButton(new ImageIcon("image/go.GIF")); button3=new JButton(new ImageIcon("NextArrow.gif")); label=new JLabel("图像标签", new ImageIcon("Candl02.gif"),SwingConstants.CENTER);

pane.setBackground(new Color(255,255,204)); panel1.setBackground(new Color(255,255,204)); panel2.setBackground(new Color(255,255,204)); button1.setToolTipText("向上翻页按钮"); button2.setToolTipText("跳转按钮"); button3.setToolTipText("向下翻页按钮");

pane.add(panel1,BorderLayout.NORTH); pane.add(panel2,BorderLayout.SOUTH); panel1.add(button1); panel1.add(button2); panel1.add(button3); panel2.add(label); }

9.4.2 Swing工具栏 例9.11 工具栏与文本区应用,如图所示。

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class W12 extends JFrame implements ActionListener { JButton button1,button2,button3; JToolBar toolBar; JTextArea textArea; JScrollPane scrollPane; JPanel panel; public W12() { super("工具栏按钮"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

button1=new JButton(new ImageIcon("left.gif")); button2=new JButton(new ImageIcon("go.gif")); button3=new JButton(new ImageIcon("right.gif")); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); toolBar=new JToolBar(); toolBar.add(button1); toolBar.add(button2); toolBar.add(button3);

toolBar=new JToolBar(); toolBar.add(button1); toolBar.add(button2); toolBar.add(button3); textArea=new JTextArea(6,30); scrollPane=new JScrollPane(textArea); panel=new JPanel(); setContentPane(panel); panel.setLayout(new BorderLayout()); panel.setPreferredSize(new Dimension(300,150)); panel.add(toolBar,BorderLayout.NORTH); panel.add(scrollPane,BorderLayout.CENTER); pack(); show(); }

public void actionPerformed(ActionEvent e) { String s=""; if (e.getSource()==button1) s="左按钮被单击\n"; else if (e.getSource()==button2) s="中按钮被单击\n"; else if (e.getSource()==button3) s="右按钮被单击\n"; textArea.append(s); } public static void main(String[] args) { new W12();

习 题 1.创建一个窗口对象时要注意什么? 2.使用最简洁的方法创建一个可关闭的窗口。 习 题 1.创建一个窗口对象时要注意什么? 2.使用最简洁的方法创建一个可关闭的窗口。 3.向窗口添加菜单有哪几个步骤?设计一个有“退出”命令的菜单并添加到窗口。 4.创建一个窗口,要求有“退出”按钮、菜单“退出”命令,而且菜单、按钮、窗口本身的关闭按钮都要起作用。 5.如何为菜单添加分隔线?如何创建复选菜单项?如何创建多级菜单? 6.创建一个带有多级菜单和复选框菜单的窗口,并在菜单中加入分隔线。 7.创建一个窗口,单击“提示”按钮可出现一个写有“你好!”文字的标签。 8.将第7题按Swing特性改写。