使用Java Swing组件进行事件处理方法的分析与比较
JAVA事件处理机制
14
使用事件监听器类
import java.awt.*; public class TestButton{ public static void main(String args[ ]) { Frame f = new Frame(“Test”); Button b = new Button(“Press Me!”); b.addActionListener(new ButtonHandler( )); f.add(b, “Center”); f.pack( ); f.setVisible(true) ; } }
12
事件监听器类的编写要点
事件监听器类应该包括以下两部分内容: 事件监听器类应该包括以下两部分内容: 1.在事件监听器类的声明中指定要实现的监听器接口名,如: 在事件监听器类的声明中指定要实现的监听器接口名, 在事件监听器类的声明中指定要实现的监听器接口名 public class MyListener implements XxxListener { … } 2.实现监听器接口中的事件处理方法,如: 实现监听器接口中的事件处理方法, 实现监听器接口中的事件处理方法 public void 事件处理方法名(XxxEvent e) { ...//处理某个事件的代码... } 然后,在一个或多个组件上可以进行监听器类的实例的注册。 然后,在一个或多个组件上可以进行监听器类的实例的注册。如: 组件对象.addXxxListener(MyListener对象);
5
事件处理机制的几个重要概念
注册事件监听器
为了能够让事件监听器检查某个组件(事件源) 是否发生了某些事件,并且在发生时激活事件 处理器进行相应的处理,必须在事件源上注册 事件监听器。这是通过使用事件源组件的以下 方法来完成的:
Java GUI:SWT、Swing、AWT的介绍及比较
本文通过对 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit (AWT)GUI 工具包进行比较,可以帮助新应用程序的开发人员从中选择适当的工具。
首先我们要弄清一个问题:为什么会有多个Java™ GUI 工具包呢?最好的答案是,一个工具包并不能满足所有的要求,最近也不会开发一个可以满足所有要求的 GUI 工具包。
每个工具包都有各自的优缺点,这样就可以根据自己的需求和目标用户来选择适当的工具包。
下面就让我们来学习有关这些工具包的知识。
AWT 概述Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。
AWT 的主要优点是,它在 Java 技术的每个版本上都成为了一种标准配置,包括早期的 Web 浏览器中的 Java 实现;另外它也非常稳定。
这意味着我们不需要单独安装这个工具包,在任何一个 Java 运行环境中都可以使用它,这一点正是我们所希望的特性。
AWT 是一个非常简单的具有有限 GUI 组件、布局管理器和事件的工具包。
这是因为 Sun 公司决定为 AWT 使用一种最小公分母(LCD)的方法。
因此它只会使用为所有 Java 主机环境定义的 GUI 组件。
最终的结果非常不幸,有些经常使用的组件,例如表、树、进度条等,都不支持。
对于需要更多组件类型的应用程序来说,我们需要从头开始创建这些组件。
这是一个很大的负担。
通常对于 AWT 来说(也适用于 Swing 和 SWT),每个事件类型都有一个相关的 XxxListener 接口(XxxAdapter 的实现可能为空),其中 Xxx 是去掉Event 后缀的事件名(例如,KeyEvent 事件的接口是 KeyListener),用来把事件传递给处理程序。
应用程序会为自己感兴趣处理的事件的事件源(GUI 组件或部件)进行注册。
有时监听接口要处理多个事件。
AWT 的一个很好的特性是它通常可以对 GUI 组件自动进行销毁。
Swing深入
AWT-SWT-Swing大比较之一:模型设计与实现总的来说Swing/AWT和SWT在事件处理机制上是类似的,窗口组件的树状结构也是类似的。
图形用户界面系统在事件处理设计上有两大类,一类是单线程模型,一类是多线程模型。
在事件处理机制上,三者都是遵循单线程规则。
单线程模型对于事件处理不保证线程安全性(Thread Safety),所有的事件处理都在Event Dispatch Thread(EDT)上进行,此一类事件模型通常叫做单线程模型。
这种模型规定所有对组件的访问操作必须在EDT上完成。
为什么对于组件的访问需要在EDT上完成?这主要是为了保证对于组件状态的改变是同步的,保证了界面组件的可确定性。
这中模型是大部分图形用户界面工具采用的模型,包括Swing/AWT、SWT、GTK、WinForm等等。
这种模型的好处是,结构设计和代码实现都比较简单,避免了为了实现线程同步的复杂处理。
但是也带来了一些问题,最常见的问题是,程序员容易将长时间复杂任务的处理放在事件处理函数完成,造成EDT线程被阻塞,给用户造成界面失去响应的错觉。
其实人们对于Swing速度慢和反映迟钝的感觉大部分来源于此,简单的说,是程序员的问题,而不是Swing自身的问题,是因为程序员没有理解这种事件处理机制造成的。
其实在SWT、GTK、WinForm等任何以这种事件模型为基础的工具都会出现。
重现的方法就是你简单的将长时间处理的任务放在事件处理函数中,你的用户界面就会失去响应。
如何解决这种问题?通用的办法就是采用异步线程处理长时间任务。
但是还要记住的是,在这种任务中对于界面的更新要采用SwingUtilities.invokeLater或者在SWT采用Synchroniz e方法,将访问操作放到EDT上进行。
关于如何写一个有效处理长时间任务的Swing程序,将会在其他文章中描述。
多线程模型中,所有的事件处理都是在异步线程中进行,界面组件同步访问的操作需要程序员来保证。
JavaSwing中处理各组件事件的一般步骤完整版
J a v a S w i n g中处理各组件事件的一般步骤集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]Java Swing中处理各组件事件的一般步骤是:1.新建一个组件(如JButton)。
2.将该组件添加到相应的面板(如JPanel)。
3.注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
4.定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
以上步骤我们可以用多种方法实现。
但人们通常用二种方法。
第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。
为了说明如何使用上述三种方法实现事件的处理方法,我们建立一个简单的应用程序。
该程序界面有两个按钮,当用户点击相应的按钮,就会弹出一个对话框显示相应的内容。
通过这个简单程序,你可以实现自己更多、更复杂的用户界面程序。
首先,我们利用单个监听器来实现该程序。
我们定义一个名为Simple1的类来包括所有代码。
所有的用户行为(如点击按钮)由一个监听器SimpleListenner中的actionPerformed方法来处理。
以下是代码:import .*;import .*;public class Simple1{private static JFrame frame;dd(myPanel);();(true);}}让我们来看看以上代码是如何工作的。
在main方法中,我们定义了一个JFrame,然后将面板Jpanel添加到窗体中,该面板包括两个按钮。
相应的变量Frame,button1,button2定义在程序的开头部分。
在程序入口main方法中,首先新建Simple1组件,通过构造器建立用户GUI,定义一个面板Jpanle,,增加两个按钮,然后利用将两个按钮加入到一个活动监听器SimpleLister中,最后,两个按钮添加到面板。
Java桌面应用开发指南:JavaFX和Swing比较与选择
Java桌面应用开发指南:JavaFX和Swing比较与选择引言:随着互联网的发展,Web应用和移动应用的兴起,桌面应用似乎逐渐被边缘化了。
然而,在某些场景下,仍然有许多需求需要桌面应用来完成。
Java作为一种强大而灵活的编程语言,提供了多种选择来开发桌面应用,其中JavaFX和Swing是两个备受关注的框架。
本文将对JavaFX和Swing进行比较,并为开发者提供选择的指南。
一、JavaFX简介:JavaFX是一个用于构建富客户端应用程序的框架,它提供了丰富的图形和多媒体功能,以及现代化的用户界面控件。
JavaFX是Java平台的一部分,从Java 8开始成为Java标准库的一部分。
它使用Java语言和FXML(一种基于XML的用户界面描述语言)来创建应用程序。
二、Swing简介:Swing是Java平台上的一个GUI工具包,它提供了一组丰富的用户界面组件,可以用来构建跨平台的桌面应用。
Swing是Java SE的一部分,从JDK 1.2版本开始引入。
它使用Java语言来创建应用程序,可以通过布局管理器来管理组件的位置和大小。
三、比较与选择:1. 用户界面设计:JavaFX提供了现代化的用户界面控件,如按钮、文本框、表格等,可以轻松地创建吸引人的用户界面。
它还支持CSS样式和皮肤,可以实现界面的定制化。
相比之下,Swing的用户界面控件相对简单,需要自己实现样式和皮肤。
2. 响应式编程:JavaFX采用了响应式编程的思想,使用属性绑定和事件驱动机制来实现界面组件之间的交互。
这种方式可以使代码更加简洁和可读。
而Swing则采用了传统的事件监听机制,需要手动编写监听器来处理用户操作。
3. 多媒体支持:JavaFX提供了内置的多媒体支持,可以播放音频和视频文件,以及处理图像和动画。
而Swing则需要借助第三方库来实现多媒体功能。
4. 跨平台性:JavaFX和Swing都具备跨平台的特性,可以在不同的操作系统上运行。
swing事件处理机制
swing事件处理机制Swing事件处理机制Swing是Java中用于创建图形用户界面(GUI)的一套组件库。
在Swing中,事件处理机制起着至关重要的作用。
本文将介绍Swing 事件处理机制的基本原理和使用方法。
事件处理机制是指当用户与GUI界面交互时,系统会自动检测并处理用户触发的事件。
在Swing中,事件可以是鼠标点击、键盘输入、窗口关闭等用户行为。
事件处理机制的核心思想是“观察者模式”,即当事件发生时,会通知相应的事件监听器进行处理。
在Swing中,事件源(Event Source)是指能够触发事件的组件,如按钮、菜单等。
事件监听器(Event Listener)是实现了特定接口的类,用于监听特定类型的事件。
当事件源触发事件时,会调用相应的事件监听器的方法进行处理。
Swing事件处理机制的基本步骤如下:1. 创建事件源:首先需要创建一个能够触发事件的组件,如按钮。
2. 创建事件监听器:根据需要,创建一个事件监听器类并实现相应的接口,如ActionListener接口用于处理按钮点击事件。
3. 注册事件监听器:将事件监听器注册到事件源上,以便监听事件的发生。
4. 处理事件:当事件源触发事件时,系统会自动调用事件监听器的方法进行处理。
下面以一个简单的示例来说明Swing事件处理机制的使用方法。
假设我们需要创建一个界面,其中包含一个按钮,点击按钮后会弹出一个对话框显示一条消息。
我们需要创建一个JFrame对象作为界面的容器,并设置布局管理器和关闭操作。
然后,创建一个JButton对象作为按钮,并设置按钮的文本。
接下来,创建一个JOptionPane对象作为对话框,并设置对话框的消息。
然后,我们需要创建一个事件监听器类,实现ActionListener接口。
在事件监听器类中,需要实现actionPerformed方法,用于处理按钮点击事件。
在该方法中,我们调用JOptionPane的showMessageDialog方法,将对话框显示出来。
Java第06章--1(AWT与Swing)
• • 视图(view):它专门负责组件的绘制工作,主要涉及 paint()方法。MVC设计范式的最大优点是一个模型可以 有多个视图,每个视图是一个不同侧面但内容却是完整的。 • 一个模型的几个视图都是从不同侧面、用完整的内容来描 述同一个模型。当模型的控制器要修改其内容时,均会通 知这每个视图,它们都会自动地更新自己的视图显示。 • • 控制器(controller):专门负责管理和处理组件所接 收到的事件,这些事件可能来自用户的操作。如键盘输入、 鼠标点击和拖放等,也可能来自系统,如系统计时器发出 的事件。 • 视图和其控制器之间的通信不仅频繁且非常复杂,因此 JFC系统把两者封装成一个整体。
• • 模型(model):模型负责获取和管理组件的状态,用户若 需要询问组件的状态时,实际上是询问该组件的模型。 • 若要询问Swing型按钮组件(JButton 类的一个对象)的状 态,可调用JButton 类的父类javax.swing.AbstractButton所 提供的isSelected()方法,它定义为: – public boolean isSelected() { ... } – 该方法返回一个逻辑值,若为true则该按钮组件被压下,反 之返回false则按钮是松开状态。 • javax.swing包中的各种组件,对于描述该组件状态和内容的 模 型 都 是 用 以 Model 结 尾 的 接 口 实 现 , 例 如 , 对 于 按 钮 在 javax.swing包中有一个如下定义的接口: – public interface ButtonModel extends ItemSelectable { ... } • 每个JButton类的对象都保存着一个表示该按钮组件模型的对 象,调用其父类AbstractButton的方法就可以得到它,即: – JButton b = new JButton( "确定" );
java swing实验心得
java swing实验心得Java Swing实验心得在进行Java Swing实验的过程中,我深刻地体会到了Swing作为Java 的图形用户界面(GUI)工具包的强大功能和灵活性。
通过实践,我进一步掌握了Swing的基本概念、常用组件以及事件处理机制,深化了对面向对象编程的理解,并且体验了开发GUI应用程序的乐趣和成就感。
首先,在实验中我对Swing的基本概念有了更加清晰的理解。
Swing是一个用于构建图形用户界面的工具包,它是AWT(Abstract Window Toolkit)的扩展,提供了更多的组件和更强大的功能。
与AWT相比,Swing 更加独立、轻量级,具有更好的跨平台性能。
通过实验,我明确了Swing 使用的基本原则和构造GUI应用程序的基本步骤。
其次,我熟悉了Swing的常用组件及其使用方法。
Swing提供了丰富的组件,如按钮、标签、文本框、列表框、下拉框等等,每个组件都有特定的功能和属性。
在实验中,我通过与不同组件的交互使用,了解了它们的基本用法和常见属性的设置。
例如,通过按钮的点击事件实现交互,通过文本框的输入事件获取用户输入,通过列表框的选中事件实现列表项的处理等等。
此外,我对Swing的布局管理有了更深入的了解。
Swing提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout 等,用于管理组件的布局和排列。
在实验中,我掌握了这些布局管理器的基本使用方法,并且体验到了不同布局管理器对于界面布局的灵活性和效果的不同。
另外,我了解了Swing的事件处理机制。
Swing采用事件驱动的方式,通过监听器(Listener)对用户操作进行响应。
在实验中,我学会了使用事件监听器接口和适配器来处理用户的交互操作。
例如,通过为按钮添加ActionListener监听器,实现按钮的点击事件处理;通过为文本框添加DocumentListener监听器,实现实时监测文本框内容的变化等。
Swing事件大全
Swing中的事件处理监听器:ActionListener方法:actionPerformed事件:ActionEvent● String getActionCommand()actioncommand是控件内部的一个字符串,用于标识控件的状态。
此函数可以取得控件的状态,从而决定到底该做什么。
● int getModifiers()取得“产生此事件时,用户同时按下的组合键”● long getWhen()取得“产生此事件时的时间戳”事件产生原因:点击按钮,在列表框中选择内容,在文本框中点回车,计时器到期监听器:AdjustmentListener方法:adjustmentValueChanged事件:AdjustmentEvent● Adjustable getAdjustable()adjustable是一个接口,各种滚动条都实现了这个接口。
● int getAdjustmentType()取得滚动类型,共有UNIT_INCREMENT,UNIT_DECREMENT,BLOCK_INCREMENT,BLOCK_DECREMENT,TRACK共5种类型● int getValue()取得滚动滑块的当前值事件产生原因:滚动条的滚动监听器:ItemListener方法:itemStateChanged事件:ItemEvent● Objedt getItem()取得被选中的元素。
注意,返回值是Object,还应该进行强制类型转换。
● ItemSelectable getItemSelectable()ItemSelectable是一个接口,代表那些包含了n个可供选择的子元素的对象。
此方法返回产生此事件的对象。
此方法的作用主要在于,如果一个列表框是允许多选的,那么上面的方法就不好用了,应该用此方法得到列表对象,再取得被选中的多个元素。
● int getStateChange()取得选择的状态,是SELECTED还是DESELECTED事件产生原因:各种按钮的点击,列表框的选择监听器:FocusListener方法:focusGained、focusLost事件:FocusEvent● Component getOppositeComponent()得到“参与焦点变换的”另一个对象。
Java面向对象程序设计案例教程课件:图形用户界面开发与事件处理
《Java面向对象程序设计案例教程》
7.2 Swing基础
• Swing组件是Java语言提供的第二代GUI设计工 具包,它以AWT为基础,在AWT内容的基础上 新增或改进了一些GUI组件,使得GUI程序功能 更强大,设计更容易、更方便。
• Swing与AWT有以下不同。
• (1) Swing是完全用Java语言编写的,所以称 Swing组件是轻量级组件,没有本地代码,不依 赖操作系统的支持,比AWT构件具有更强的实 用性。Swing在不同的平台表现一致,并且有能 力提供本地窗口系统不支持的其他特性。
《Java面向对象程序设计案例教程》 • Swing的类层次结构如图所示:
《Java面向对象程序设计案例教程》
• 3. 简单的范例 • 一个简单的Swing GUI应用程序。该程序生成一个窗
口, • 窗口中有一个标签,用于显示输出。 • (1) 程序代码: • 1. import java.awt.* ; • 2. import javax.swing.* ; • 3. public class SwingDemo • 4. { • 5. public static void main(String args[]) • 6. { • 7. JFrame fm = new JFrame("第一个Windows程序") ; • 8. JLabel label = new JLabel("这是第一个GUI程序") ;
• 教材例题7-12 利用组合框显示、选取地名。
• 教材例题8.2 ,例题8.3用不同方法生成JFrame窗口
《Java面向对象程序设计案例教程》
• 7.3.2 面板容器JPanel
• 面板JPanel也是Java中常用到的容器之一,面板是一种透明 的容器,既没有标题,也没有边框,就像一块透明的玻璃。 与JFrame不同,它不能作为最外层的容器单独存在,它首 先必须作为一个构件放置到其他容器中,然后再把它作为容 器,把其他构件放到其中。
深入浅出java swing程序设计-概述说明以及解释
深入浅出java swing程序设计-概述说明以及解释1.引言1.1 概述Java Swing是一种用于构建图形用户界面(Graphical User Interface,简称GUI)的Java库。
它为开发人员提供了丰富的组件和布局管理器,可以轻松创建具有各种功能和样式的交互式应用程序。
Java Swing的出现填补了Java原生GUI工具包的不足,为开发人员提供了更多的自定义和灵活性。
与AWT(Abstract Window Toolkit)相比,Swing提供了更多的组件和界面控件,同时具备更好的跨平台性。
Java Swing不仅仅是一个图形用户界面库,它还提供了一整套用于处理用户输入、图形绘制、多媒体展示等功能的类和工具。
开发人员可以利用这些工具快速构建具有丰富交互性的应用程序。
本文将深入浅出地介绍Java Swing程序设计的基本概念和技巧。
我们将从Swing的组件和布局开始,逐步展示如何创建简单且功能强大的用户界面。
通过学习本文,读者将能够掌握Java Swing的核心知识,并能够利用这些知识开发出符合自己需求的应用程序。
本文的目的是帮助读者快速上手Java Swing,了解其基本概念和使用方法。
同时,我们也将展望Java Swing的未来发展,探讨其在现代应用程序开发中的重要性和应用前景。
在接下来的正文部分,我们将详细介绍Java Swing的基本概念,包括组件、事件、布局等内容。
同时,我们还将给出一些实际的例子,以便读者更好地理解和应用所学知识。
总之,本文将从大纲所列的各个方面对Java Swing进行深入浅出的探讨,旨在帮助读者全面了解和掌握Java Swing程序设计的基本技巧和应用方法。
希望读者能够通过本文的学习,具备自主开发Java Swing应用程序的能力,并能在实际项目中灵活应用所学知识。
1.2 文章结构本文主要以深入浅出的方式介绍Java Swing程序设计。
文章分为引言、正文和结论三个部分,每个部分有相应的小节。
使用Java开发桌面应用SwingvsJavaFX
使用Java开发桌面应用SwingvsJavaFX使用Java开发桌面应用:Swing vs JavaFXJava是一种广泛用于开发各种类型应用程序的编程语言。
在开发桌面应用时,Java提供了几个选项,其中两个主要的是Swing和JavaFX。
本文将对这两个框架进行比较,帮助您选择适合您的项目的最佳选项。
Swing是Java最古老和最成熟的用户界面(User Interface, UI)工具集之一。
它作为Java的一部分,几乎随处可用。
Swing提供了丰富的UI组件,如按钮、文本框、菜单、对话框等。
使用Swing可以创建传统的、基于组件的桌面应用程序。
另一方面,JavaFX是Java平台上较新的UI工具集。
它从Java SE 7开始成为Java的一部分,并在Java SE 8中成为默认的UI工具集。
JavaFX提供了现代、高度可定制和具有吸引力的用户界面。
它使用了一种基于场景图(Scene Graph)的可视化对象模型,可以更容易地实现复杂的UI效果和动画。
下面是对Swing和JavaFX的比较:1. UI设计和样式:- Swing的UI组件更传统,可能看起来有些老旧。
但它提供了广泛的可定制性,可以使用自定义样式来改变外观。
- JavaFX提供了现代化的UI组件,具有更好的外观和动画效果。
它使用CSS来改变UI的样式,使得设计更容易。
2. 布局管理:- Swing使用布局管理器来安排组件的位置和大小。
布局管理器可以以多种方式组合,以灵活地实现复杂的布局。
- JavaFX使用场景图来布局组件,通过设置约束(constraints)来控制它们的位置和大小。
它提供了一种更直观和灵活的方式来设计界面。
3. 多媒体支持:- Swing对多媒体的支持有限,需要借助第三方库来实现音频和视频播放。
- JavaFX内置了强大的多媒体支持,可以轻松地添加和控制音频、视频和动画。
4. 性能和渲染:- Swing在简单和中等复杂度的应用中表现良好。
Java桌面程序开发第5章-使用Swing常用组件
面所需要的基本组件、选择型组件,菜单等的创建和使用 2.理解:工具栏的创建,对话框的创建和使用
5.1 GUI的基本元素:标签、按钮、文本框
1.JLabel
• JLabel类是一个用来显示文本的类,文本就是一个字符串。在程 序中指定要显示的字符串,但该字符串在运行时不能被用户修改
密码文本框是用来输入密码的文本框。
密码框继承单行文本框,所以密码框只显示单行输入框。 但是,与单行文本框不同的是,密码框输入的文字将不会 正常显示出来,而是使用其它字符代替。
可以通过调用setEchoChar(char c)来更改显示字符。密 码框的作用是防止别人看到所输入的文字信息。
JPasswordField的构造方法:
JCheckBox类继承JToggleButton类,而JToggleButton类 实现一个反选按键,只有按下和释放两种状态。复选框也 有类似功能,只有选择和不选择两种状态,而且复选框可 由多个按钮组成一个组群。
定义它们之间的间隔。 • int getHorizontalAlignment():返回标签内容沿 X 轴的对齐方式。 • int getVerticalAlignment() :返回标签内容沿 Y 轴的对齐方式。 • void setLabelFor(Component c):设置将标签添加到的组件。
区要换行)。
实例
例5-10 使用JTextArea
例5-11 从一个文本区复制选中的文字到另一个文本区
5.3 选择型组件
Java提供了很多的选择型组件,用户可通过单击选定,免 去了输入文本的麻烦。
常用的选项组件有单选框,复选框,列表框,组合列表框 等。
第5章 基于Swing的图形化用户界面_1布局管理器与事件处理 - 全
通过 java.awt 包
创建 GUI
容器 组件 布局管理器
包含 AWT 容器组件
以图形表示的对象允许用户交互
AWT 包 含 内 容
定义 GUI 组件的位置
使用 AWT 图形方法相对于窗口绘制图形
图形和绘制方法
字体 事件
创建并构造用于选择新字体的对象 用于用户和系统交互
AWT类结构
框架JFrame
JFrame是放置其他Swing组件的顶级容器。
JFrame用于在Swing程序中创建顶层窗口。 默认情况下,框架的尺寸是没有实际意义的0X0像素。 为了设定合适的框架大小,要调用框架的setSize方法。
默认情况下,框架在创建时是不可见的。为了显示框架 ,要调用框架的setVisible方法。
AWTEvent Font Component ng.object Graphics MenuComponent 布局管理器类 Window Frame Container
Panel
Applet
Swing概述
通过 Swing (轻量级组件,纯Java组件) Javax.swing 包 创建 GUI
默认情况下,当用户关闭一个框架时,该框架会隐藏起
来,程序不会终止,调用setDefaultCloseOperation。
JFrame应用示例
创建具有以下特征的窗口: • 自定义窗口的标题; • 窗口的大小不可变(300,200); • 窗口居中显示。
标题
最大化按钮 失效
JFrame应用示例
import javax.swing.*; class App5_1 { public static void main(String[] args) { JFrame f=new JFrame("第一个Java窗口"); //创建容器 f.setSize(300,200); //设置容器大小 f.setLocationRelativeTo(null) ; //框架居中 f.setVisible(true); //设置框架可见性 f.setResizable(false); //设置不能改变框架大小 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Swing3事件模型
XxxListener的形式来命名的,如: 的形式来命名的,
ActionListener、MouseListener、ItemListener等; 、 、 等
ActionListener接口
按钮被点击是图形编程中最普遍的事件, 按钮被点击是图形编程中最普遍的事件,我们经 常要处理; 常要处理; ActionListener被称为活动监听器,一般用来监听 被称为活动监听器, 被称为活动监听器 按钮的点击事件; 按钮的点击事件; 该接口中包含有一个抽象方法,原型如下: 该接口中包含有一个抽象方法,原型如下:
public class EventDemo extends JFrame { private JLabel lblMsg; private JButton btnClick; public EventDemo() { …… …… } //构造方法,代码略 构造方法, 构造方法
/*采用内部类的方式实现监听器接口 采用内部类的方式实现监听器接口*/ 采用内部类的方式实现监听器接口 private class MyListener implements ActionListener { /*实现接口中的抽象方法,事件发生时,将自动调用此方法 实现接口中的抽象方法, 实现接口中的抽象方法 事件发生时,将自动调用此方法*/ public void actionPerformed(ActionEvent ae) { lblMsg.setText("我被点击了!"); 我被点击了! //设置标签中的文本 我被点击了 设置标签中的文本 } } public static void main(String[] args) { new EventDemo(); } }
MouseEvent
Java形界面SwingJavaFX和AWT
Java形界面SwingJavaFX和AWT Java形界面Swing、JavaFX和AWTJava是一种广泛应用的编程语言,其强大的图形界面(GUI)库使得开发者能够创建各种各样的用户界面。
在Java中,有三种主要的GUI库,它们分别是Swing、JavaFX和AWT。
本文将详细介绍这三种GUI库的特性和使用方法。
一、SwingSwing是Java提供的一套用于构建图形界面的库,它基于AWT库进行了扩展。
Swing提供了丰富的组件和布局管理器,使得开发者能够轻松地创建漂亮和交互性强的界面。
1.1 组件Swing提供了大量的组件,包括按钮、文本框、标签、列表框、表格等。
开发者可以通过组合这些组件来构建复杂的界面。
Swing组件的特点是可定制性高,开发者可以自定义组件的外观和行为。
1.2 布局管理器Swing通过布局管理器来自动调整组件的位置和大小。
常用的布局管理器有FlowLayout、BorderLayout、GridLayout和GridBagLayout。
开发者可以根据界面的需要选择合适的布局管理器。
1.3 事件处理Swing使用事件模型来处理用户的输入和其他操作。
开发者可以为组件添加事件监听器,响应用户的操作。
事件处理是Swing应用中的重要部分,可以使界面与用户产生交互。
二、JavaFXJavaFX是Oracle推出的新一代Java GUI库。
与Swing相比,JavaFX提供了更多的现代化特性,包括动画效果、3D支持和富文本等。
2.1 UI控件JavaFX提供了一套丰富的UI控件,包括按钮、标签、文本框、下拉框等。
这些控件样式多样,并且支持CSS样式表进行自定义。
2.2 布局JavaFX使用场景图(Scene Graph)来组织界面元素。
开发者可以使用各种布局容器来构建界面,如VBox、HBox、BorderPane等。
2.3 动画效果JavaFX内置了强大的动画框架,开发者可以轻松地创建平滑的过渡效果、缩放动画和旋转动画等。
3ATWSwing事件处理
3ATWSwing事件处理AWT(AbtractWindowingToolkit)是用来创建Java图形用户界面的基本工具.JavaSwing是JFC(JavaFoundationClae)的一部分,它可以弥补AWT的一些不足.Container(容器):扩展组件的抽象基本类,例如Panel、Applet、Window、Dialog和Frame等是由Container演变的类,容器中可以包括多个组件。
LayoutManager(布局管理器):定义容器中组件的摆放位置和大小接口。
Java中定义了几种默认的布局管理器。
Graphic(图形):组件内与图形处理相关的类,每个组件都包含一个图形类的对象。
1组件",ColorgetForeground():获取组件的前景色。
",StringgetName():获取组件的名称。
",DimeniongetSize():以Dimenion对象的形式返回组件的大小。
",voidpaint(Graphicg):绘制该组件。
",voidrepaint():重绘组件。
",voidupdate(Graphicg):更新该组件。
",voidetViible(booleanb):根据参数的值显示或隐藏此组件。
",voidetSize(intwidth,intheight):调整组件的大小,使其宽度和高度分别为width和height。
",voidetName(Stringname):将组件的名称设置为指定的字符串。
",voidetForeground(Colorc):设置组件的前景色。
AWT的组件库画布(Canva)是处于屏幕上的一个空白矩形区域,在该区域可以绘图,也可以获得用户激发的事件。
画布组件可以监听鼠标事件和键盘事件。
publicvoidpaint(Graphicg)由于画布的paint()方法默认操作是清除画布,所以重写此方法的应用程序不需要调用uper.paint(g)。
java语言中awt和swing组件的基本用法
java语言中awt和swing组件的基本用法AWT (Abstract Window Toolkit)是Java编程语言的一套图形用户界面(GUI)组件集,它提供了创建和管理窗口、按钮、标签等图形组件的能力。
AWT组件是依赖于操作系统的本地GUI组件。
下面是使用AWT组件的基本步骤:1.导入AWT相关的类:通常在使用AWT组件之前,需要导入`java.awt`和`java.awt.event`包中的类。
2.创建一个Frame:使用`Frame`类来创建一个顶级窗口。
3.创建其他组件:使用AWT提供的组件类(如`Button`、`Label`等)来创建其他需要的组件。
4.将组件添加到Frame:使用`add()`方法将其他组件添加到Frame中。
5.设置Frame的布局:使用`setLayout()`方法设置Frame的布局方式,如`FlowLayout`、`GridLayout`等。
6.设置Frame的大小和可见性:使用`setSize()`方法设置Frame 的大小,使用`setVisible(true)`方法设置Frame可见。
7.添加事件监听器:使用`addActionListener()`方法为按钮等组件添加事件监听器。
Swing是Java编程语言中提供的一组GUI组件,它是在AWT的基础上进行了增强和扩展。
Swing组件是纯Java组件,不依赖于操作系统的本地组件,因此具有更高的可移植性和灵活性。
下面是使用Swing组件的基本步骤:1.导入Swing相关的类:通常在使用Swing组件之前,需要导入`javax.swing`包中的类。
2.创建一个JFrame:使用`JFrame`类来创建一个顶级窗口。
3.创建其他组件:使用Swing提供的组件类(如`JButton`、`JLabel`等)来创建其他需要的组件。
4.将组件添加到JFrame中:使用`add()`方法将其他组件添加到JFrame中。
java中swing的用法
java中swing的用法Swing是Java中的一种GUI(图形用户界面)工具包,它是基于AWT(抽象窗口工具箱)开发的。
和AWT不同的是,Swing使用了Java 2D API来实现自己的用户界面元素,这使得Swing的外观和感觉更加现代化,更加灵活。
2. Swing的优点Swing的优点主要有以下几点:- 跨平台性:Swing是基于Java开发的,因此可以在任何支持Java的平台上运行,如Windows、Linux、Unix等。
- 灵活性:Swing提供了丰富的组件,开发者可以通过组合不同的组件来创建非常复杂的用户界面。
- 动态性:Swing提供了一些动画和效果来增强用户体验。
- 可定制性:Swing的外观和感觉可以通过使用不同的Look and Feel来改变,而这些Look and Feel可以在运行时动态地切换。
- 易学易用:Swing的API设计合理,很容易学习和使用。
3. Swing的组件Swing提供了很多组件,下面列举了一些常用的组件:- JLabel:标签组件,用于显示文本或图像。
- JButton:按钮组件,用于触发事件。
- JTextField:文本框组件,用于输入文本。
- JPasswordField:密码框组件,用于输入密码。
- JTextArea:文本域组件,用于显示多行文本。
- JList:列表组件,用于显示列表数据。
- JTable:表格组件,用于显示表格数据。
- JComboBox:下拉列表组件,用于选择一个选项。
- JCheckBox:复选框组件,用于选择多个选项中的一个或多个。
- JRadioButton:单选按钮组件,用于选择一个选项。
4. Swing的布局管理器在Swing中,布局管理器用于控制组件的排列。
Swing提供了多种布局管理器,下面列举了一些常用的布局管理器:- BorderLayout:边框布局管理器,将容器分成5个区域:北、南、东、西、中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用Java Swing组件进行事件处理方法的分析与比较摘要:Swing组件是Java基本类库的一部分,是用于开发Java应用程序用户界面的开发工具包。
通过具体实例分析了多种使用Swing 组件进行事件处理的方法,并对这些方法进行了比较。
关键词:Java;Swing;监听;内部类;事件0引言Swing组件是Java语言中用来编写图形化界面的工具包,它使用灵活、功能强大,使得开发人员利用其提供的各种类与方法能够快速地创建出符合用户需求的各种美观、实用的图形界面。
Swing组件具有自动对各种用户的动作产生响应的功能,例如当某一用户点击button按钮或选择菜单栏时,该动作将会被监听处理。
在代码编写的过程中注册监听器是必须完成的工作,通过它对事件源进行监听,这样在程序中就可以十分方便地对用户行为进行响应处理。
1使用Swing组件进行事件处理过程使用Java Swing组件进行事件处理的过程分为如下几个步骤:首先,创建一个新的Swing组件(例如按钮或者菜单栏等);其次,将刚刚创建的组件添加到定义的面板中去;然后,通过注册监听器对事件源进行监听(例如对用户点击按钮或者点击鼠标的动作);最后,在程序中编写响应事件源产生事件的各种方法。
上述几个步骤的实现可以通过多种方法来完成。
第一种可使用的方法是通过注册单个监听器并使用多个if条件判断语句来决定响应的事件源;第二种方法使用Java语言中的匿名内部类来进行相关的事件处理过程;第三种方法是通过一般内部类来进行事件的响应。
第二种、第三种方法从本质上来说,都是在进行事件处理的过程中使用了多个Java的内部类,而不同之处在于具体实现有较大变化。
下面通过一个简单的Java 应用程序(创建两个按钮,当用户点击按钮后产生不同的显示结果)展示怎样通过以上3种方法来实现Swing组件的事件处理过程。
1.1单个监听器方式该方法使用单个监听器来进行实现。
具体完成该方法的过程为:建立一个名为Example的类,当用户点击button按钮后,监听器ExampleListenner会对该动作进行监听并交由actionPerformed()方法来进行相应的事件处理。
在该过程中,使用了一个动作监听器来对事件源进行监听,用多个if的条件语句来决定是哪个事件源。
Example类构造器的主要代码:①JPanel panel1 = new JPanel();②JButton button1 = new JButton("button1 ");③JButton button2 = new JButton("button2 ");④ExampleListener listener1 = new ExampleListener();⑤button1.addActionListener(listener1);⑥button2.addActionListener(listener1);⑦panel1.add(button1);⑧panel.add(button2);// 添加按钮到面板第①句新建了一个panel1的面板对象;第②、③句创建了两个按钮:button1和button2;第④句创建了一个监听器;第⑤、⑥句让button1和button2两个按钮共享第④句中新建的监听器;第⑦、⑧句将两个button添加到第①句中的panel1面板中。
内部监听类ExampleListener用来监听事件并响应,监听器中的actionPerformed(ActionEvent e)方法的主要代码为:①if (e.getSource()==button1)②String bName = e.getActionCommand();③if (bName.equals("button1 "))④JOptionPane.showMessageDialog(frame1,"用户点击了button1 ");⑤else if (bName.equals("button2 "))⑥JOptionPane.showMessageDialog(frame1,"用户点击了button2 ");⑦else⑧JOptionPane.showMessageDialog(frame1,"未知事件源" );第①、②句通过getSource方法来判断用户点击了哪个按钮并使用getActionCommand方法获得按钮名称;第③到第⑧句利用if语句来确定事件源的产生即哪个按钮被用户点击了,在相应控件中输出相关提示。
main方法中的主要代码:①Example ex = new Example();②JFrame frame1 = new JFrame("ex ");③frame1.addWindowListener(new WindowAdapter(){④public void windowClosing(WindowEvent e)⑤{System.exit(0);} });⑥frame1.getContentPane().add(panel1);⑦frame1.pack();⑧frame1.setVisible(true);第①、②句创建了一个JFrame的对象frame1;第③~⑤语句在frame1对象中加入窗口监听器用来处理关闭事件的方法;第⑥~⑧句将面板panel1添加到frame1中,panel1中包含两个button按钮。
当程序运行时,通过注册过的监听器对两个button按钮进行监听,当用户点击其中的一个按钮后(使用if语句进行判断),相应的提示信息将显示在面板上。
1.2匿名内部类方式使用简单的匿名内部类作为addActionListener的变量即可。
在这种方法中,使用匿名内部类对组件事件进行监听,这样就可以避免运用if语句来判断哪个按钮被点击即哪个事件源产生的事件。
在Example类中需要改变的主要代码如下:①button1.addActionListener(②new ActionListener()③{ public void actionPerformed(ActionEvent e){④JOptionPane.showMessageDialog(frame1,"用户点击了button1 ");} } );⑤panel1.add(button1);// 添加按钮到面板第①~④句对按钮button1添加了一个动作监听器,一旦button1被点击,窗体会显示“用户点击了button1”的提示信息;第⑤句将已被监听button1放置于面板中。
针对button2可以使用与button1相同的监听方式完成对点击button2的动作进行事件处理。
1.3一般内部类方式这种方法将所有关于事件处理的程序代码聚集起来,增加代码的可阅读性和可维护性,避免使用第二种方法带来的代码混乱的重大缺陷。
由于使用了一般内部类,使得定义的内部类可以被Swing组件多次使用。
一般内部类来进行事件处理的主要代码如下:①private class Handler1 implements ActionListener②{ public void actionPerformed(ActionEvent e){③JOptionPane.showMessageDialog(frame1,"用户点击了button1");} }第①~③句语句创建了一个名为Handler1的类,它执行了ActionListener的接口,一旦button1被点击就会产生相应的事件处理。
针对button2,同样创建一个类似的类,使其在被点击后在面板中能够显示提示信息。
类构造器中每个按钮都进行了注册监听,监听通过内部类的方式实现,代码如下:button1.addActionListener(new Handler1());该语句为button1按钮增加了一个动作监听,参数为上文中的Handler1内部类对象,这样一来button1就被监听,若其被点击,相应的后续事件将会得到处理。
同样对于button2按钮来说,采取相同的手段也就完成了对点击button2事件源的事件处理。
2三种事件处理方法比较上述3种方法都可以实现Swing组件的事件处理。
使用单个监听器的方法时需要if语句的协助来完成对组件事件的监听,即判断事件源的产生。
面对简单的程序或者组件事件较少的情况时,这种方式简单而实用,反之将带来很大的问题。
长而复杂的程序代码使得程序的可读性和可维护性变得十分糟糕,这是开发人员最不愿意看到的情况。
使用匿名内部类的方法由于其本身的局限性也存在一些缺陷,如:组件的定义、类的定义及相关的事件处理代码零乱,分布于程序的各个角落,难以统一进行管理;嵌套的程序代码在遇到复杂情况时将给开发人员造成极大麻烦,使他们无法快速和便捷地对程序进行修改与维护。
使用一般内部类的方法能够较好规避使用匿名内部类带来的代码无序和混乱的问题,开发人员能够高效地定位代码段落,非常方便地对相应的代码段进行浏览和修改,此外该方法的程序代码能够被Swing组件反复使用。
3结语文章分析了Java Swing组件进行事件处理的3种方式。
虽然3种方式都能够完成相应的事件处理过程,但是使用单个监听器和匿名内部类的实现这两种方式或多或少存在一定的缺陷,而第三种方式即使用一般内部类,从代码的编写、代码的阅读、代码的维护和程序的可扩展性来讲都是比较好的实现事件处理的一种方式。
参考文献:[1]赵景晖,迟勇.Java语言程序设计[M].大连:大连理工大学出版社,2009.[2]郭庚麒,周江.Java程序设计项目教程[M].北京:中国铁道出版社,2011.[3]耿详义,张跃平.Java 2使用教程[M].北京:清华大学出版社,2012.。