Heim  >  Artikel  >  类库下载  >  图形用户界面GUI

图形用户界面GUI

高洛峰
高洛峰Original
2016-10-19 09:35:362468Durchsuche

  1. JavaGUI主要开发工具 -- Swing类库的诞生与功能

  一个合格的Java Developer,不仅要掌握技术,还要有一定的Java历史背景知识储备。所以先简要介绍一下用于JavaGUI开发的主要类库:Swing。

  在Java 1.0时代便有设计GUI的基本类库Abstract Window Toolkit,简称AWT。AWT库工作原理是将处理用户界面元素的任务委派给目标平台(操作系统)的本地GUI工具箱,由本地GUI工具箱负责用户界面元素的创建和动作。这种工作方式是有利也有弊,先说下利处:

处理速度可能要快一点。

可以适应不同的平台,“一次编写,随处使用”。

  弊处:

观感依赖于目标平台。

有些平台并没有像Windows或Mac这样丰富的界面组件(早期)。所以把AWT的设计工作限制在了“最小公分母”。

不同平台存在不同的bug。

  1996年,Netscape创建了另一种GUI库IFC,他的工作方式是 将用户界面组件绘制在空白窗口上,而对等体只需要负责创建和绘制空白窗口。Sun和Netscape合作并完善了这种方式,创建了名为Swing的用户界面库,这便是Swing的诞生。

   但是Swing并没有完全取代AWT,到目前Java SE 8中依旧有AWT与Swing两个功能类库:

AWT import java.awt (java为核心包)

Swing import javax.swing (javax包为功能扩展包)

  Swing没有完全取代AWT的原因是:Swing是基于AWT的架构之上,Swing仅仅是提供了能力更强大的用户界面组件。在Swing编写的程序中,还是需要AWT进行事件处理。简单说就是,Swing是用户界面类,AWT是底层机制。

1.jpg

2.创建JFrame框架

  Frame意为框架,也就是最顶层的窗口,可以在框架里添加组件。我们创建一个窗口首先要创建一个框架。

1.jpg

  注:Swing组件类都以“J”开头,如 JButton,JFrame等,AWT组件不带“J"。如果Swing组件和AWT组件一起用可能会导致视觉和行为的不一致。

  现在,我们来创建一个空框架:

package simpleFrame;

//会用到awt和swing的类,先import。
import java.awt.*;         
import javax.swing.*;

//创建一个SimpleFrame的类,里面只有一个main函数,main函数里有个事件分派线程。
public class SimpleFrame {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new SizedFrame(); //new一个SizeFrame对象给frame变量管理,这便有了框架。SizeFrame是JFrame的子类。
                frame.setTitle("SimpleFrame");   //设置框架的标题.
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设定关闭按钮。
                frame.setVisible(true);          //设定框架可见。
            }
        });
    }
}

//其实到这里为止,我们可以在第12行直接new一个JFrame交给frame,但是JFrame默认框架大小是0×0,没什么实际意义。
//所以我们选择继承JFrame做一个子类起名SizedFrame,在这个类里做一个构造器来设定框架的大小。
class SizedFrame extends JFrame {
    
    //构造器
    public SizedFrame() {
        
        //下面四行代码为获取你pc屏幕的高度和宽度,交给int变量screenHeight和screenWidth。
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;
        
        //setSize方法由父类Component类(GUI对象的祖先)继承而来。设定框架长宽都为屏幕的1/2.
        //setLocationByPlatform由Window类(Frame类的父类)继承而来。由平台(操作系统)来选择一个合适的显示位置。
        setSize(screenWidth/2,screenHeight/2);
        setLocationByPlatform(true);
        
        //setIconImage方法由Frame类继承而来,设置框架图标。
        Image img = new ImageIcon("icon.gif").getImage();
        setIconImage(img);
        
        //当然,事件分派线程里的设定标题、设定关闭按钮、和设定框架可见操作,也可以放在构造器里来做。
    }
}

  Windows 10下运行:

1.jpg

  3.在框架中添加组件JComponent

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:JAVA基础之正则表达式Nächster Artikel:改善Java程序的151个建议