跳轉到內容

事件和按鈕

50% developed
來自華夏公益教科書


在上一頁中,我們建立了一個應用程式,它被動地顯示一條“Hello, world”訊息。然而,這很快就會變得無聊。在本章中,我們將討論 swing 事件並瞭解 JButton 類,我們將構建一個包含 JButtonJLabel 的小型應用程式,並使用它來介紹佈局的概念。

事件 是 Swing 工作方式的基礎部分。使用者在各個元件上的操作會導致元件觸發各種型別的事件。其他 Java 物件可以註冊為任何元件的事件監聽器,它們對這些元件的事件感興趣。為了成為監聽器,物件必須實現相應的監聽器介面(例如,ActionListener 用於操作事件,FocusListener 用於焦點事件等),該介面包含在事件被觸發時呼叫的方法。

在 Java 中,事件本身是物件,是事件類的例項。事件類位於 java.awt.eventjavax.swing.event 包中。一些常見的事件類有

  • ActionEvent - 由一些物件觸發的(有點通用的)事件,包括 JButtons
  • MouseEvent - 當用戶使用滑鼠執行某些操作時觸發,例如單擊、拖動或更一般的移動
  • KeyEvent - 當用戶按下、釋放或更一般地說在鍵盤上鍵入時觸發

為了瞭解事件的使用方式,我們將研究 JButtons,以便我們可以構建一個示例。

JButton 是一個元件,它與 JLabel 一樣,可以包含文字、影像或兩者兼而有之。但是,正如我們所期望的,它還具有使用者可以透過單擊它來“按下”它的屬性,這會導致它觸發事件(具體來說是操作事件)。在這個例子中,我們將或多或少地重做我們之前的例子,除了我們將新增一個 JButton。在下一節中,我們將新增功能,以便按下按鈕可以執行某些操作。

以下是建立之前“Hello, world”應用程式以及螢幕底部按鈕的程式碼

左側程式碼建立的視窗
Computer code 帶按鈕的 Swing 應用程式
import javax.swing.*;
import java.awt.BorderLayout; // The BorderLayout class
                  // lives in java.awt.  We
                  // use its constants to tell
                  // the JFrame where we want the
                  // components to go.

// expanded version of the hello application,
// but with a button below.
public class HelloWithButton {

    public static void main(String[] args) {
        
        // construct the JLabel,
        // an overloaded version of the constructor
        // allows us to specify the alignment off the
        // bat
        JLabel label = new JLabel
            ("Hello, World!", SwingConstants.CENTER);
        
        // create the button. The text in the
        // constructor will be visible on the
        // button.
        JButton button = new JButton("Button");
        
        // create the frame
        JFrame frame = new JFrame("Hello");
        
        // add the label and the button to the
        // frame, using layout constants.
        frame.add(label, BorderLayout.CENTER);
        frame.add(button, BorderLayout.SOUTH);
        
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.toFront();
    }
}

您應該看到一個框架出現,其中包含文字“Hello, World!”在中心,以及一個標籤為“Button”的按鈕在底部。您可以單擊按鈕,但它不會執行任何操作。

在這個例子中,我們不僅將元件新增到框架中,還指定了它們應該放置的位置。每個包含其他元件的元件都有一個 LayoutManager 物件,它控制組件的佈局方式,並且不同的佈局管理器以不同的方式佈局其元件。佈局管理器的幾個例子是 GridLayoutCardLayoutBorderLayout。最後一個是 JFrame 的預設佈局管理器(儘管我們可以使用其 setLayout() 方法更改元件的佈局管理器)。雖然佈局管理器將在後面的章節中更詳細地介紹,但我們在這裡要說的是,BorderLayout 管理器將它們的空間分成五個區域,每個區域都與 BorderLayout 類中的一個常量相關聯。這些常量(解釋了這些區域)是

  • BorderLayout.NORTH,
  • BorderLayout.SOUTH,
  • BorderLayout.EAST,
  • BorderLayout.WEST
  • BorderLayout.CENTER.

如果您要將元件新增到使用 BorderLayout 的容器中,您可以將這些常量之一作為可選的第二個引數傳遞給 add() 方法以指定元件應該放置的位置。如果沒有指定常量,佈局管理器預設情況下將新元件放置在中心。我建議您嘗試之前的示例並更改佈局引數,並觀察效果。


Clipboard

待辦事項
新增螢幕截圖。


Clipboard

待辦事項
使用分開的示例。


華夏公益教科書