1. 程式人生 > >Java GUI程式設計(圖形化使用者介面)之一

Java GUI程式設計(圖形化使用者介面)之一

引言

以前的學習當中,我們都使用的是命令互動方式:
       例如:在DOS命令列中通過javac java命令啟動程式.
    軟體的互動的方式:
    1. 命令互動方式
    2. 圖形互動方式
       模擬ATM自助取款系統
       案例:https://blog.csdn.net/m0_37738838/article/details/81408347
   Java提供了專業的API用於開發圖形使用者介面
   GUI–> Graphic User Interface
   將要了解GUI API的框架結構,以及GUI元件以及元件之間的關係,容器和佈局管理器,顏色,字型等.

分類

1、AWT

Java1.0版本的圖形使用者介面庫,設計目標是幫助程式設計師編寫在所有平臺上都能良好表現的GUI程式。為了實現這個目標Java1.0提供了抽象視窗工具集(AWT),但是這個目標並沒有達到。AWT在所有的系統上表現都不好。因為:最初版本的AWT是在一個月內構思,設計和實現的(Think in Java )。
Abstract Window Toolkit 抽象視窗工具集
Java將圖形使用者介面相關的類捆綁在了一起,放在了一個稱之為抽象視窗工具集的庫中.AWT適合開發簡單的圖形使用者介面,並不適合開發複雜的GUI專案.
位於: java.awt.* 中,定義了很多的元件類,開發者可以直接建立物件加以使用
缺點: 所有的圖形介面都依賴於底層的作業系統,容易發生於特定平臺相關的故障.
AWT呼叫本地系統資源生成圖形化介面, 依賴本地平臺. 1.0

2、Swing

SUN公司對AWT進行了升級,基於AWT,推出了一種更穩定,更通用和更靈活的庫.稱之為Swing元件庫(Swing component)。
既然都是用於GUI設計的元件庫,那麼為了區分Swing元件類和對應的AWT元件類,Swing元件類都已字母J為字首.位於:javax.swing.* 中,提供了和AWT中等同的所有的元件類,但是類名的前面多加了一個J.
SWING可以跨平臺. 1.2
我們主要學習Swing GUI元件.

3、Java GUI API

GUI API包含的類分為三個部分:元件類(component class) 容器類(container class),和輔助類(helper class)
1.元件類是用來建立使用者圖形介面的,例如JButton,JLabel,JTextField.
2.容器類是用來包含其他元件的,例如JFrame,JPanel
3.輔助類是用來支援GUI元件的,例如Color,Font

3.1.元件類

在圖形使用者介面程式中當我們想要建立按鈕、複選框和滾動條等這些可以顯示在螢幕上的物件,該如何建立。其實這些都屬於一類叫做元件類。

AWT中的元件根類

類 Component
java.lang.Object
                  java.awt.Component

Swing中的元件根類

javax.swing 
類 JComponent
java.lang.Object
                  java.awt.Component
                        java.awt.Container
                              javax.swing.JComponent

    元件類的例項可以顯示在螢幕上.Component類是包括容器類的所有使用者介面類的根類是java.awt中的類,對應的Swing中的是Jcomponent.瞭解了Component和JComponent都是抽象類.所以不能使用new關鍵字建立物件.所以需要使用它們的具體的實現類來建立物件.
在AWT中典型圖形使用者介面中的按鈕(Button)、複選框(Checkbox)和滾動條(Scrollbar)都是元件類,都是Component類的子類.
     在Swing中的GUI元件,有對應的JButton,JCheckBox,JscrollBar
繼承關係圖(AWT)
這裡寫圖片描述

3.2.容器類

      容器(Container),是一個特殊的元件,該元件可以通過add()新增其他元件。
     容器類適用於盛裝其他GUI元件的GUI元件.例如 Panel Frame Dialog都是AWT元件的容器類.對應的Swing元件的容器類是JPanel JFrame JDialog

3.3.GUI輔助類

     用來描述GUI元件的屬性,例如影象的顏色,字型等. 注意:輔助類是在java.awt中的

3.4.GUI執行原理

     在JDK的bin目錄中有javaw.exe .javaw.exe是java在window中專門用於執行GUI程式.

4、體驗GUI

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Demo {
    public static void main(String[] args) {
        // 建立JFrame
        JFrame frame = new JFrame("hello,world");
        // 設定尺寸
        frame.setSize(200, 100);
        // JFrame在螢幕居中
        frame.setLocationRelativeTo(null);
        // JFrame關閉時的操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 顯示JFrame
        frame.setVisible(true);

    }
}

5、Jframe框架

    JFrame(框架)是一個容器
    建立一個使用者介面需要建立一個JFrame來存放使用者介面元件.例如存放按鈕,文字框。

javax.swing 
類 JFrame
java.lang.Object
  java.awt.Component
      java.awt.Container
          java.awt.Window
              java.awt.Frame
                  javax.swing.JFrame

5.1.建立一個框架

public class Demo1 {
    public static void main(String[] args) {
        // 建立JFrame
        JFrame frame = new JFrame("我的frame");
        // 顯示JFrame
        frame.setVisible(true);

    }
}

注意:需要呼叫setVisible(true)方法後才會顯示框架
執行程式會在視窗的左上角顯示一個視窗,但是隻能顯示標題欄,而且關閉JFrame時,程式程式沒有停止.
所以需要完成如下需求:
1: 設定Jframe的寬度和高度
2: 讓Jframe顯示在螢幕中間
3: 關閉Jframe時,程式會停止

5.1.1.設定JFrame的寬度和高度
java.awt.Window.setSize(int width, int height)

查詢API文件,檢視 setSize方法,可以指定框架的寬度和高度.引數型別是int,注意是以畫素為單位,普通的筆記本的螢幕解析度為1280*800或者1366*768.注意:解析度表示每平方英寸的畫素數.螢幕解析度越高,螢幕的畫素越多.所以解析度越高看到的細節就越多.
setSize方法被定義在java.awt.Component類中,被Component 的子類java.awt.Window 重寫.而Jframe以繼承了Windiws類所以也具備該方法.

這裡寫圖片描述

5.1.2.JFrame顯示在螢幕中間

setLocationRelativeTo()方法

java.awt.Window.setLocationRelativeTo(Component c)
設定視窗相對於指定元件的位置。
如果 c 為 null,則此視窗將置於螢幕的中央。

setLocationRelativeTo(null)方法可以在螢幕上居中顯示框架.

如果不想要設定在中間,可以使用

setLocation(200, 100);
5.1.3.關閉JFrame程式停止

setDefaultCloseOperation(int operation)方法

javax.swing.JFrame.setDefaultCloseOperation(int operation)

該方法告訴程式,當框架關閉時結束程式.方法的引數是JFrame 的常量EXIT_ON_CLOSE
新增完畢

public class Demo1 {
    public static void main(String[] args) {
        // 建立JFrame
        JFrame frame = new JFrame("我的frame");
        // 設定尺寸
        frame.setSize(200, 100);
        // JFrame在螢幕居中
        frame.setLocationRelativeTo(null);
        // JFrame關閉時的操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 顯示JFrame
        frame.setVisible(true);

    }
}