天天看点

JAVA图形界面(GUI)抽象工具集(AWT)和SwingSwing例子

前面的博客中,我们写的程序都属于控制台程序,从这一篇开始,将为大家介绍如何编写GUI程序,GUI意思是图形读者界面,比如我们用的QQ就属于GUI程序。

抽象工具集(AWT)和Swing

JAVA GUI基本类库位于

java.awt

包中,这个包称为抽象窗口工具箱(Abstract Window Toolkit,AWT)。AWT中包含了很多图形界面编程的类。它包括用来容纳其它组件的容器类、用来控制进行组件布局的各种布局管理器、用来监听程序与读者进行交互的事件监听器,还有一套绘图机制,用来维护图形界面等。

AWT的特点是简单、稳定、重量级(依赖本地平台),AWT所涉及的类一般在java.awt包及其子包中。AWT主要类的继承关系如图所示:

JAVA图形界面(GUI)抽象工具集(AWT)和SwingSwing例子

如果用AWT组件设计出来的图形界面,读者会发现窗口中的组件,如按钮等都是与操作系统相对应的组件是基本一致的,所以利用AWT设计的程序在不同操作系统中运行的效果是不一致的。AWT实现中对平台是有依赖的,它的相关组件是重量级,不够灵活。如果平台上没有相关组件,则其应用就没办法实现。

Swing是基于AWT的,它除了顶级组件是重量级的,而其他的组件例如按钮、文本框等还有布局都与操作系统无关,是轻量级的。Swing保证了可移植性,完全用java语言编写,和AWT相比,Swing提供了更多的组件,引入了更多的新的特性和能力。Swing增强了AWT中组件的功能,这些增强的组件命名通常在AWT组件名前加一个“J”字母。

Swing的类结构如下:

java.lang.Object

+–java.awt.Component

  +–java.awt.Container

   +–javax.swing.JComponent

  

Swing没有完全放弃AWT,而是基于AWT之上提供了更强大的读者界面组件。而且Swing图形组件使用AWT事件类和监听接口处理事件响应。AWT和Swing组件混合使用可能产生一些无法预料的错误,同一个程序不建议混合使用。

Swing例子

下面这个例子只是演示一下Swing的运行效果。

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class SwingDemo extends JFrame
{
   private DrawPanel drawPanel = null;

   public SwingDemo()
   {
      super("SwingDemo");
      drawPanel = new DrawPanel();
      add(drawPanel);

      setSize(300, 200);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
   }

   public static void main(String[] args)
   {
      new SwingDemo().setVisible(true);
   }
}

class DrawPanel extends JPanel
{
   @Override
   public void paint(Graphics g)
   {
      super.paint(g);
      g.drawString("Hello Swing", 10, 50);
   }
}           

运行结果:

JAVA图形界面(GUI)抽象工具集(AWT)和SwingSwing例子