目录

SWING - 快速指南

SWING - Overview

Swing API是一组可扩展的GUI组件,可以简化开发人员的生活,创建基于JAVA的前端/ GUI应用程序。 它构建在AWT API之上,可以替代AWT API,因为它几乎具有与AWT控件相对应的每个控件。 Swing组件遵循模型 - 视图 - 控制器架构,以满足以下标准。

  • 单个API足以支持多种外观。

  • API将由模型驱动,因此不需要最高级别的API来获取数据。

  • API是使用Java Bean模型,以便Builder Tools和IDE可以为开发人员提供更好的服务以供使用。

MVC架构

Swing API架构遵循基于松散的MVC架构,其方式如下。

  • 模型表示组件的数据。

  • View表示组件数据的可视化表示。

  • Controller在视图上获取用户的输入,并反映Component的数据中的更改。

  • Swing组件将Model作为一个单独的元素,而View和Controller部分则在User Interface元素中进行了分组。 因此,Swing具有可插拔的外观架构。

摇摆功能

  • Light Weight - Swing组件独立于本机操作系统的API,因为Swing API控件主要使用纯JAVA代码而不是底层操作系统调用来呈现。

  • Rich Controls - Swing提供了一组丰富的高级控件,如Tree,TabbedPane,slider,colorpicker和table控件。

  • Highly Customizable - 可以通过非常简单的方式Highly Customizable摆动控件,因为视觉外观与内部表示无关。

  • Pluggable look-and-feel - 基于SWING的GUI应用程序外观可以在运行时根据可用值进行更改。

SWING - Environment Setup

本节将指导您如何在计算机上下载和设置Java。 请使用以下步骤设置环境。

Java SE可从链接Download Java免费获得。 因此,您可以下载基于您的操作系统的版本。

按照说明下载Java并运行.exe以在您的计算机上安装Java。 在计算机上安装Java后,需要将环境变量设置为指向正确的安装目录。

设置Windows 2000/XP的路径

假设您已在c:\Program Files\java\jdk目录中安装了Java -

Step 1 - 右键单击​​“我的电脑”,然后选择“属性”。

Step 2 - 单击“高级”选项卡下的“环境变量”按钮。

Step 3 - 更改“Path”变量,使其还包含Java可执行文件的路径。 例如,如果路径当前设置为'C:\WINDOWS\SYSTEM32' ,则将路径更改为'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'

设置Windows 95/98/ME的路径

假设您已在c:\Program Files\java\jdk目录中安装了Java -

Step 1 - 编辑'C:\autoexec.bat'文件并在末尾添加以下行: 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'

设置Linux,UNIX,Solaris,FreeBSD的路径

应将环境变量PATH设置为指向已安装Java二进制文件的位置。 如果您在执行此操作时遇到问题,请参阅Shell文档。

例如,如果你使用bash作为你的shell,那么你可以将以下行添加到末尾'.bashrc: export PATH=/path/to/java:$PATH'

流行的Java编辑器 (Popular Java Editors)

要编写Java程序,您需要一个文本编辑器。 市场上还有更复杂的IDE。 但就目前而言,您可以考虑以下其中一项 -

  • Notepad - 在Windows机器上,您可以使用任何简单的文本编辑器,如记事本(本教程推荐),TextPad。

  • Netbeans - Netbeans是一个开源且免费的Java IDE,可以从https://www.netbeans.org/index.html下载。

  • Eclipse - Eclipse也是由Eclipse开源社区开发的Java IDE,可以从https://www.eclipse.org/下载。

SWING - Controls

每个用户界面都考虑以下三个主要方面 -

  • UI Elements - 这些是用户最终看到并与之交互的核心可视元素。 GWT提供了从基本到复杂的广泛使用和常见元素的大量列表,我们将在本教程中介绍。

  • Layouts - 它们定义了如何在屏幕上组织UI元素,并为GUI(图形用户界面)提供最终外观。 这部分将在布局章节中介绍。

  • Behavior - 这些是用户与UI元素交互时发生的事件。 这部分将在“事件处理”一章中介绍。

UI类

每个SWING控件都从以下Component类层次结构继承属性。

S.No. 类和描述
1 Component

Component是SWING的非菜单用户界面控件的抽象基类。 Component表示具有图形表示的对象

2 Container

Container是可以包含其他SWING组件的组件

3 JComponent

JComponent是所有SWING UI组件的基类。 为了使用从JComponent继承的SWING组件,组件必须位于包含层次结构中,其根是顶级SWING容器

SWING UI元素

以下是使用SWING设计GUI时常用控件的列表。

S.No. 类和描述
1 JLabel

JLabel对象是用于在容器中放置文本的组件。

2 JButton

该类创建一个带标签的按钮。

3 JColorChooser

JColorChooser提供了一个控件窗格,旨在允许用户操作和选择颜色。

4 JCheck Box

JCheckBox是一个图形组件,可以处于on (true)或off (false)状态。

5 JRadioButton

JRadioButton类是一个图形组件,可以处于on (true)或off (false)状态。 在一组。

6 JList

JList组件向用户呈现文本项的滚动列表。

7 JComboBox

JComboBox组件向用户显示一个显示选项菜单。

8 JTextField

JTextField对象是一个文本组件,允许编辑单行文本。

9 JPasswordField

JPasswordField对象是专门用于输入密码的文本组件。

10 JTextArea

JTextArea对象是一个文本组件,允许编辑多行文本。

11 ImageIcon

ImageIcon控件是Icon界面的一个实现,它从图像绘制图标

12 JScrollbar

Scrollbar控件表示滚动条组件,以便用户可以从值范围中进行选择。

13 JOptionPane

JOptionPane提供了一组标准对话框,用于提示用户输入值或通知他们某些内容。

14 JFileChooser

JFileChooser控件表示用户可以从中选择文件的对话窗口。

15 JProgressBar

随着任务进展完成,进度条显示任务的完成百分比。

16 JSlider

JSlider允许用户通过在有界区间内滑动旋钮以图形方式选择值。

17 JSpinner

JSpinner是单行输入字段,允许用户从有序序列中选择数字或对象值。

SWING - Event Handling

在本章中,您将了解事件及其类型,并了解如何处理事件。 为了更好地理解,本章末尾提供了示例。

什么是事件? (What is an Event?)

对象状态的更改称为Event ,即事件描述源的状态更改。 由于用户与图形用户界面组件的交互而生成事件。 例如,单击按钮,移动鼠标,通过键盘输入字符,从列表中选择项目以及滚动页面是导致事件发生的活动。

事件类型

这些活动大致可分为两类 -

  • Foreground Events - 这些事件需要用户的直接交互。 它们是作为人与图形用户界面中的图形组件交互的结果而生成的。 例如,单击按钮,移动鼠标,通过键盘输入字符,从列表中选择项目,滚动页面等。

  • Background Events - 这些事件需要最终用户的交互。 操作系统中断,硬件或软件故障,计时器到期和操作完成是后台事件的一些示例。

什么是事件处理?

事件处理是控制事件并决定事件发生时应该发生什么的机制。 此机制具有一个代码,称为事件处理程序,在事件发生时执行。

Java使用委派事件模型来处理事件。 此模型定义了生成和处理事件的标准机制。

授权事件模型具有以下主要参与者。

  • Source - 源是事件发生的对象。 Source负责向其处理程序提供已发生事件的信息。 Java为我们提供了源对象的类。

  • Listener - 它也称为事件处理程序。 监听器负责生成对事件的响应。 从Java实现的角度来看,侦听器也是一个对象。 听众等待直到收到事件。 收到事件后,侦听器处理事件然后返回。

这种方法的好处是用户界面逻辑与生成事件的逻辑完全分离。 用户界面元素能够将事件的处理委托给单独的代码。

在此模型中,需要向源对象注册侦听器,以便侦听器可以接收事件通知。 这是处理事件的有效方式,因为事件通知仅发送给想要接收它们的侦听器。

涉及事件处理的步骤

Step 1 - 用户单击按钮并生成事件。

Step 2 - 自动创建相关事件类的对象,并在同一对象中填充有关源和事件的信息。

Step 3 - 将事件对象转发到已注册的侦听器类的方法。

Step 4 - 该方法被执行并返回。

关于监听器的要点

  • 为了设计一个监听器类,您必须开发一些监听器接口。 这些Listener接口预测了一些公共抽象回调方法,这些方法必须由监听器类实现。

  • 如果未实现任何预定义接口,则您的类不能充当源对象的侦听器类。

回调方法

这些是API提供程序提供的方法,由应用程序程序员定义并由应用程序开发人员调用。 这里的回调方法代表一个事件方法。 在响应事件时,java jre将触发回调方法。 所有这些回调方法都在监听器接口中提供。

如果组件想要某个侦听器监听其事件,则源必须将自己注册到侦听器。

事件处理示例

使用您选择的任何编辑器创建以下Java程序,例如D:/ 》 SWING 》 com 》 iowiki 》 gui 》

SwingControlDemo.java

package com.iowiki.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingControlDemo {
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;
   public SwingControlDemo(){
      prepareGUI();
   }
   public static void main(String[] args){
      SwingControlDemo swingControlDemo = new SwingControlDemo();  
      swingControlDemo.showEventDemo();       
   }
   private void prepareGUI(){
      mainFrame = new JFrame("Java SWING Examples");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));
      headerLabel = new JLabel("",JLabel.CENTER );
      statusLabel = new JLabel("",JLabel.CENTER);        
      statusLabel.setSize(350,100);
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());
      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }
   private void showEventDemo(){
      headerLabel.setText("Control in action: Button"); 
      JButton okButton = new JButton("OK");
      JButton submitButton = new JButton("Submit");
      JButton cancelButton = new JButton("Cancel");
      okButton.setActionCommand("OK");
      submitButton.setActionCommand("Submit");
      cancelButton.setActionCommand("Cancel");
      okButton.addActionListener(new ButtonClickListener()); 
      submitButton.addActionListener(new ButtonClickListener()); 
      cancelButton.addActionListener(new ButtonClickListener()); 
      controlPanel.add(okButton);
      controlPanel.add(submitButton);
      controlPanel.add(cancelButton);       
      mainFrame.setVisible(true);  
   }
   private class ButtonClickListener implements ActionListener{
      public void actionPerformed(ActionEvent e) {
         String command = e.getActionCommand();  
         if( command.equals( "OK" ))  {
            statusLabel.setText("Ok Button clicked.");
         } else if( command.equals( "Submit" ) )  {
            statusLabel.setText("Submit Button clicked."); 
         } else {
            statusLabel.setText("Cancel Button clicked.");
         }  	
      }		
   }
}

使用命令提示符编译程序。 转到D:/ 》 SWING并键入以下命令。

D:\AWT>javac com\iowiki\gui\SwingControlDemo.java

如果没有错误发生,则表示编译成功。 使用以下命令运行该程序。

D:\AWT>java com.iowiki.gui.SwingControlDemo

验证以下输出。

SWING事件处理

SWING - Event Classes

事件类代表事件。 Java提供了各种事件类,但是,只讨论那些更频繁使用的事件类。

EventObject类

它是从中派生所有事件状态对象的根类。 所有事件都是通过对对象( source的引用构造的,该对象在逻辑上被认为是最初发生事件的对象。 该类在java.util包中定义。

Class 声明 (Class Declaration)

以下是java.util.EventObject类的声明 -

public class EventObject
   extends Object
      implements Serializable

字段 (Field)

以下是java.util.EventObject类的字段 -

protected Object source - 事件最初发生的对象。

类构造函数 (Class Constructors)

Sr.No. 构造函数和描述
1

EventObject(Object source)

构建一个典型的事件。

Class Methods

Sr.No. 方法和描述
1

Object getSource()

事件最初发生的对象。

2

String toString()

返回此EventObject的String表示形式。

方法继承 (Methods Inherited)

该类继承以下类中的方法 -

  • java.lang.Object

SWING事件类

以下是常用事件类的列表。

Sr.No. 类和描述
1 AWTEvent

它是所有SWING事件的根事件类。 该类及其子类取代原始的java.awt.Event类。

2 ActionEvent

单击按钮或双击列表项时会生成ActionEvent。

3 InputEvent

InputEvent类是所有组件级输入事件的根事件类。

4 KeyEvent

在输入字符时,将生成Key事件。

5 MouseEvent

此事件表示组件中发生了鼠标操作。

6 WindowEvent

此类的对象表示窗口状态的更改。

7 AdjustmentEvent

此类的对象表示Adjustable对象发出的调整事件。

8 ComponentEvent

此类的对象表示窗口状态的更改。

9 ContainerEvent

此类的对象表示窗口状态的更改。

10 MouseMotionEvent

此类的对象表示窗口状态的更改。

11 PaintEvent

此类的对象表示窗口状态的更改。

SWING - Event Listeners

事件侦听器表示负责处理事件的接口。 Java提供了各种事件监听器类,但是,只讨论那些更频繁使用的类。 事件侦听器方法的每个方法都有一个参数作为对象,它是EventObject类的子类。 例如,鼠标事件侦听器方法将接受MouseEvent的实例,其中MouseEvent派生自EventObject。

EventListner接口

它是每个侦听器接口必须扩展的标记接口。 该类在java.util包中定义。

Class 声明 (Class Declaration)

以下是java.util.EventListener接口的声明 -

public interface EventListener

SWING事件监听器接口

以下是常用事件侦听器的列表。

Sr.No. 类和描述
1 ActionListener

此接口用于接收动作事件。

2 ComponentListener

此接口用于接收组件事件。

3 ItemListener

此接口用于接收项目事件。

4 KeyListener

该接口用于接收密钥事件。

5 MouseListener

该接口用于接收鼠标事件。

6 WindowListener

该接口用于接收窗口事件。

7 AdjustmentListener

该接口用于接收调整事件。

8 ContainerListener

此接口用于接收容器事件。

9 MouseMotionListener

该接口用于接收鼠标运动事件。

10 FocusListener

该接口用于接收焦点事件。

SWING - Event Adapters

适配器是用于接收各种事件的抽象类。 这些类中的方法是空的。 这些类作为创建侦听器对象的便利而存在。

SWING适配器

以下是在SWING中监听GUI事件时常用适配器的列表。

Sr.No. 适配器和说明
1 FocusAdapter

用于接收焦点事件的抽象适配器类。

2 KeyAdapter

用于接收键事件的抽象适配器类。

3 MouseAdapter

用于接收鼠标事件的抽象适配器类。

4 MouseMotionAdapter

用于接收鼠标移动事件的抽象适配器类。

5 WindowAdapter

用于接收窗口事件的抽象适配器类。

SWING - Layouts

布局是指容器内组件的排列。 换句话说,可以说布局将组件放置在容器内的特定位置。 布局控件的任务由布局管理器自动完成。

布局管理器

布局管理器自动定位容器中的所有组件。 即使您不使用布局管理器,组件仍然由默认布局管理器定位。 可以手动布置控制,但是由于以下两个原因,它变得非常困难。

  • 处理容器内的大量控件非常繁琐。

  • 通常,当我们需要安排它们时,不给出组件的宽度和高度信息。

Java提供了各种布局管理器来定位控件。 大小,形状和排列等属性因布局管理器而异。 当applet或应用程序窗口的大小发生变化时,组件的大小,形状和排列也会随响应而变化,即布局管理器会适应appletviewer或应用程序窗口的尺寸。

布局管理器与每个Container对象相关联。 每个布局管理器都是实现LayoutManager接口的类的对象。

以下是定义布局管理器功能的接口。

Sr.No. 界面和描述
1 LayoutManager

LayoutManager接口声明需要由类实现的那些方法,其对象将充当布局管理器。

2 LayoutManager2

LayoutManager2是LayoutManager的子接口。 此接口适用于那些知道如何基于布局约束对象布局容器的类。

AWT布局管理器类

以下是使用AWT设计GUI时常用控件的列表。

Sr.No. LayoutManager和描述
1 BorderLayout

borderlayout安排组件适合五个区域:东,西,北,南和中心。

2 CardLayout

CardLayout对象将容器中的每个组件视为卡片。 一次只能看到一张卡片。

3 FlowLayout

FlowLayout是默认布局。 它以方向流布局组件。

4 GridLayout

GridLayout以矩形网格的形式管理组件。

5 GridBagLayout

这是最灵活的布局管理器类。 GridBagLayout的对象垂直,水平或沿其基线对齐组件,而不需要相同大小的组件。

6 GroupLayout

GroupLayout对组件进行分层分组,以便将它们放置在Container中。

7 SpringLayout

SpringLayout根据一组约束定位其关联容器的子项。

SWING - Menu Classes

我们知道每个顶级窗口都有一个与之关联的菜单栏。 此菜单栏包含最终用户可用的各种菜单选项。 此外,每个选项都包含一个选项列表,称为下拉菜单。 Menu和MenuItem控件是MenuComponent类的子类。

菜单层次结构

Swing Menu Hiearchy

菜单控件

Sr.No. 类和描述
1 JMenuBar

JMenuBar对象与顶级窗口关联。

2 JMenuItem

菜单中的项必须属于JMenuItem或其任何子类。

3 JMenu

JMenu对象是一个从菜单栏显示的下拉菜单组件。

4 JCheckboxMenuItem

JCheckboxMenuItem是JMenuItem的子类。

5 JRadioButtonMenuItem

JRadioButtonMenuItem是JMenuItem的子类。

6 JPopupMenu

JPopupMenu可以在组件内的指定位置动态弹出。

SWING - Containers

容器是SWING GUI组件的组成部分。 容器提供可以定位组件的空间。 AWT中的Container本身就是一个组件,它提供了向自身添加组件的功能。 以下是需要考虑的一些值得注意的要点。

  • Container的子类称为Container。 例如,JPanel,JFrame和JWindow。

  • Container只能向自身添加一个Component。

  • 每个容器中都存在一个默认布局,可以使用setLayout方法覆盖它。

SWING容器

以下是使用SWING设计GUI时常用容器的列表。

Sr.No. 容器和描述
1 Panel

JPanel是最简单的容器。 它提供了可以放置任何其他组件的空间,包括其他面板。

2 Frame

JFrame是一个带有标题和边框的顶级窗口。

3 Window

JWindow对象是一个没有边框且没有菜单栏的顶级窗口。

↑回到顶部↑
WIKI教程 @2018