swing的第一课

Swing介绍

Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用。它是建立在AWT API之上,并作为 AWT API 的更换,因为它几乎每一个控制对应 AWT控制。 Swing 组件遵循模型 - 视图 - 控制器架构,以满足以下标准。

  • 一个单一的 API 是足够支持多种外观和风格。

  • API 模拟驱动,使最高级别的API不要求有数据。

  • API 使用Java Bean的模式,使生成工具和IDE可以提供更好的服务给开发者使用它。

MVC架构

Swing API架构如下松散的,基于MVC架构,以下列方式支付。

  • 模型表示组件的数据。

  • 查看代表组件的数据可视化表示形式。

  • 控制器采用的视图上的用户输入,并在组件的数据的变化反映。

  • Swing 组件模型作为一个单独的元素和景观,是棒状控制器部分用户界面中的元素。使用这种方式,Swing具有可插拔的外观与风格架构。

Swing 特点

  • 重量轻 - Swing 组件是独立的原生操作系统的API与Swing API控件呈现大多采用纯JAVA代码,而不是底层的操作系统调用。

  • 丰富的控件 - Swing 提供了一套丰富的先进的控制系统,如树,JTabbedPane,滑块,颜色选择器,表格控件

  • 高度可定制 - Swing 控件可以定制视觉外观是非常简单的方法,独立的内部表示。

  • 可插拔的外观和感觉 -  基于Swing GUI应用程序外观和风格基于可用值,可以在运行时改变。

Swing开发环境安装

本节将指导如何下载和设置Java 在您的机器上。请按照下列步骤来设置环境。

Java SE 是免费的,提供的链接下载Java。所以根据您的操作系统,下载一个版本。

按照说明下载 java 和运行 .exe 在你的机器上安装Java。一旦在机器上安装了Java,还需要设置环境变量指向正确的安装目录:

对于Windows 2000/XP/win7 路径:

假设您已经安装了Java在c:Program Filesjavajdk 目录:

  • 右键单击 '我的电脑r' 并选择 '属性'。

  • 点击 '环境变量' 按钮下 '高级' 标签。

  • 现在在 '路径' 变量,它也包含Java可执行文件的路径。 例如,如果路径当前设置为 'C:WINDOWSSYSTEM32', 然后可更改你的路径为 'C:WINDOWSSYSTEM32;c:Program Filesjavajdkin'.

适用于Linux,UNIX,Solaris和FreeBSD的路径:

应设置环境变量PATH指向Java二进制文件已经安装。如果你这样做有困难,请参阅shell文件。

例如,如果使用bash作为shell,添加以下行到结束行 “.bashrc文件中: '.bashrc: export PATH=/path/to/java:$PATH'

流行的Java编辑器:

编写Java程序,需要一个好的文本编辑器。在市场上有更复杂的 IDE。但现在,可以考虑以下两种:

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

  • Netbeans:是一个Java IDE,它是开源和免费,可下载 http://www.netbeans.org/index.htmll.

  • Eclipse : 也是一个Java IDE Eclipse开源社区开发的,可以直接从网上下载 http://www.eclipse.org/.

Swing控件

每一个用户界面参考主要有以下三个方面:

  • UI 元素: 有核心视觉元素,最终用户看到并与之交互。 GWT 提供了一个巨大的名单变化更复杂,本教程我们从基本的广泛使用和常见的元素。

  • 布局: 他们定义 UI 元素如何应安排在屏幕上,并提供一个最终的外观和感觉的GUI(图形用户界面)。在“布局”一章,这部分将被覆盖。

  • 行为: 这些事件发生时,与用户交互的 UI 元素。这部分将被覆盖在事件处理“一章。

UI classes

每个Swing 控件继承属性从以下组件的类层次结构。

Sr. No.类 & 描述
1 Component
容器是一个抽象基类的非菜单用户界面控件摆动。部分指图形表示的对象
2 Container
Container是一个组件,它可以包含其他Swing组件。
3 JComponent
JComponent是一个基类,所有Swing UI 组件。为了使用继承自JComponent 的 swing组件,组件必须是一个包容层次结构,其根是一个顶层的Swing容器。

SWING UI 元素:

以下是常用的控件列表而设计的图形用户界面使用Swing。

Sr. No.控件& 描述
1 JLabel
一个JLabel对象是在容器中放置文本的一个组成部分。
2 JButton
该类创建标记的按钮。
3 JColorChooser
JColorChooser提供一个用于控制窗格设计,让用户操作和选择颜色。
4 JCheck Box
JCheckBox的是一个图形化的组件可以在一个(true)或关闭(false)状态时。
5 JRadioButton
JRadioButton类是一个图形化的组件可以在一个(true)或关闭(false)状态时。在一组。
6 JList
JList组件向用户展示一个滚动的文本项列表。
7 JComboBox
JComboBox组件为用户提供了一个选择显示菜单。
8 JTextField
JTextField的对象是一个文本组件,它允许编辑的单行文本。
9 JPasswordField
JPasswordField中对象是一个专门用于输入密码的文本组件。
10 JTextArea
JTextArea对象是一个文本组件,它允许编辑的多行文本。
11 ImageIcon
ImageIcon的控件的图标界面,实现从图像绘制图标
12 JScrollbar
Scrollbar控件代表一个滚动条组件以让用户从范围选择的值。
13 JOptionPane
JOptionPane的规定设置标准对话框,提示用户提供值或向其发出通知。
14 JFileChooser
JFileChooser的控制代表一个对话框窗口,用户可以选择一个文件。
15 JProgressBar
随着任务的进展,进度条接近完成显示任务的完成百分比。
16 JSlider
JSlider让用户以图形界的时间间隔内滑动旋钮选择一个值。
17 JSpinner
JSpinner让用户从一个有序序列中选择一个数字或者一个对象值的单行输入字段。

Swing事件处理

什么是事件?

一个对象的状态变化被称为事件,即事件描述源状态的变化。事件产生的结果与用户交互的图形用户界面组件。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面的活动,使一个事件的发生。

事件的类型

事件可以被大致分为两类:

  • 前台事件 - 这些事件需要用户直接互动。在图形用户界面中的图形组件交互的人产生的后果。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面等

  • 后台事件 - 这些事件,需要最终用户的交互是已知的作为背景的事件。操作系统的中断,硬件或软件故障,定时器到期时,操作完成的背景事件的例子。

事件处理是什么?

事件处理机制,控制的事件,并决定如果一个事件发生时,会发生什么。这种机制被称为事件处理程序,在事件发生时执行的代码。 Java使用代理事件模型来处理事件。该模型定义了标准的机制来生成和处理事件。让我们简要介绍这种模式。

代理事件模型具有以下的主要参与者,即:

  • 源 - 源是一个对象,在该对象上的事件发生。它的处理器提供发生事件的信息来源是可靠的。 JAVA提供与源对象的类。

  • 监听器 - 它也被称为作为事件handler.Listener是负责产生响应一个事件。从Java实现的角度来看,监听器也是一个对象。等待直到它接收到一个事件监听器。一旦收到事件,监听器进程的事件就返回。

这种方法的好处是,用户界面逻辑完全分开,生成该事件的逻辑。用户界面元素是能够委派的事件处理单独的一段代码。在这个模型中,需要与源对象注册监听使侦听器能够接收事件通知。这是一个有效的方式处理事件,因为这些事件通知只发送给那些监听器要接收他们。

参与事件处理的步骤

  • 用户单击该按钮时产生该事件。

  • 现在有关事件类的对象是自动创建的信息源和事件在同一对象得到填充。

  • 事件对象被转发注册监听器类的方法。

  • 该方法现在得到执行并返回。

要记住的要点有关监听器

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

  • 如果不执行任何预定义的接口,类不能作为源对象的监听器类。

回调方法

这些方法所提供的API提供程序,被定义为应用程序员和应用程序开发者调用。这里的回调方法代表一个事件的方法。在响应一个事件的Java JRE将触发回调方法。所有这些回调方法的监听器接口。

如果一个组件需要一些监听器会听的事件源必须注册自己监听。

事件处理例子

选择使用任何编辑器创建以下java程序在 D:/ > SWING > com > yiibai > gui >

SwingControlDemo.java

package com.yiibai.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 SwingLayoutDemo(){
      prepareGUI();
   }

   public static void main(String[] args){
      SwingLayoutDemo swingLayoutDemo = new SwingLayoutDemo();  
      swingLayoutDemo.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 comyiibaiguiSwingControlDemo.java

如果没有错误出现,这意味着编译成功。使用下面的命令来运行程序。

D:AWT>java com.yiibai.gui.SwingControlDemo

验证下面的输出

SWING  Event Handling

Swing事件监听器

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

EventListner 接口

它是一个标记接口,每一个监听器接口扩展。这个类定义在java.util包。

类声明

以下是声明java.util.EventListener接口:

public interface EventListener

Swing事件监听器接口:

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

Sr. No.Control & Description
1 ActionListener
该接口用于接收动作事件。
2 ComponentListener
该接口用于接收组件事件。
3 ItemListener
该接口用于接收项目事件。
4 KeyListener
该接口用于接收按键事件。
5 MouseListener
该接口用于接收鼠标事件。
6 WindowListener
该接口用于接收窗口事件。
7 AdjustmentListener
该接口用于接收调整事件。
8 ContainerListener
该接口用于接收容器事件。
9 MouseMotionListener
此接口用于接收鼠标移动事件。
10 FocusListener
该接口用于接收焦点事件。

Swing事件适配器

适配器是抽象类,用于接收各种事件。这些类中的方法是空的。这些类存在的目的是方便创建监听器对象。

SWING适配器:

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

Sr. No.适配器&说明
1 FocusAdapter
接收焦点事件的抽象适配器类。
2 KeyAdapter
接收按键事件的抽象适配器类。
3 MouseAdapter
接收鼠标事件的抽象适配器类。
4 MouseMotionAdapter
接收鼠标移动事件的抽象适配器类。
5 WindowAdapter
接收窗口事件的抽象适配器类。

Swing Layout布局

布局的意味着,在容器内的配置的组件。在其他的方式,我们可以认为在一个特定的容器内的位置放置组件。布局管理器所控制布点的任务是自动完成的。

布局管理器

布局管理器自动定位容器内的所有组件。如果我们不使用布局管理器,然后定位组件的默认布局管理器。这是可能的手工布局的控制,但由于以下两个原因,它变得非常困难。

  • 这是非常繁琐的容器内处理大量的控制。

  • 通常当我们需要安排他们没有给出一个组件的宽度和高度信息。

Java 为我们提供了各种布局管理器来定位控制。属性如大小,形状和排列变化从一个布局管理器,其他的布局管理器。的小应用程序或应用程序窗口的大小改变时,即布局管理器applet浏览器或应用程序窗口的尺寸适应于响应的大小,形状和排列的组件也随之变化。

布局管理器关联的与每个容器对象。每一个布局管理器是实现布局管理接口的类的一个对象。

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

Sr. No.接口&说明
1 LayoutManager
布局管理器接口声明的对象将充当一个布局管理器类需要实现的方法。
2 LayoutManager2
LayoutManager2中的子接口布局管理。这个接口是为那些知道如何布局容器的基础上布局约束对象的类。

AWT布局管理器类:

以下是常用的控件列表而设计的图形用户界面使用AWT

Sr. No.LayoutManager & Description
1 BorderLayout
The borderlayout arranges the components to fit in the five regions: east, west, north, south and center.
2 CardLayout
The CardLayout object treats each component in the container as a card. Only one card is visible at a time.
3 FlowLayout
The FlowLayout is the default layout.It layouts the components in a directional flow.
4 GridLayout
The GridLayout manages the components in form of a rectangular grid.
5 GridBagLayout
This is the most flexible layout manager class.The object of GridBagLayout aligns the component vertically,horizontally or along their baseline without requiring the components of same size.
6 GroupLayout
The GroupLayout hierarchically groups components in order to position them in a Container.
7 SpringLayout
A SpringLayout positions the children of its associated container according to a set of constraints.

Swing Menu菜单类

正如我们所知道与菜单相关的每一个顶层窗口有一个菜单栏。此菜单栏包括提供给最终用户的各种菜单的选择。此外,每个选择包含这就是所谓的下拉菜单中的选项列表。菜单和菜单项的控件是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弹出可以在一个组件内的指定位置动态弹出。

以上内容转载自http://www.yiibai.com/swing/

原文地址:https://www.cnblogs.com/soulaz/p/5585016.html