首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

[Java 100 例] 011 - JButton 進階應用:圖示、助鍵、啟用狀態與事件處理

     編輯:Java 程式設計入門

本例展示 JButton 的進階功能,包含圖示與文字排版、助鍵設定、動作指令、啟用/停用狀態切換、工具提示,以及透過 ActionListener 實作按鈕間的互動邏輯。

程式碼範例

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonDemo extends JPanel implements ActionListener {
    protected JButton btnDisable, btnMiddle, btnEnable;

    public ButtonDemo() {
        // 載入圖示(需確保 images/ 目錄下有對應檔案)
        ImageIcon leftIcon = createImageIcon("images/right.gif");
        ImageIcon midIcon = createImageIcon("images/middle.gif");
        ImageIcon rightIcon = createImageIcon("images/left.gif");

        // 按鈕 1:停用中間按鈕
        btnDisable = new JButton("停用中間按鈕(D)", leftIcon);
        btnDisable.setVerticalTextPosition(AbstractButton.CENTER);
        btnDisable.setHorizontalTextPosition(AbstractButton.LEADING);
        btnDisable.setMnemonic(KeyEvent.VK_D); // Alt+D
        btnDisable.setActionCommand("disable");

        // 按鈕 2:中間按鈕(預設啟用)
        btnMiddle = new JButton("M中間按鈕", midIcon);
        btnMiddle.setVerticalTextPosition(AbstractButton.BOTTOM);
        btnMiddle.setHorizontalTextPosition(AbstractButton.CENTER);
        btnMiddle.setMnemonic(KeyEvent.VK_M); // Alt+M

        // 按鈕 3:啟用中間按鈕(預設停用)
        btnEnable = new JButton("E啟用中間按鈕", rightIcon);
        btnEnable.setMnemonic(KeyEvent.VK_E); // Alt+E
        btnEnable.setActionCommand("enable");
        btnEnable.setEnabled(false);

        // 註冊事件監聽器
        btnDisable.addActionListener(this);
        btnEnable.addActionListener(this);

        // 設定工具提示
        btnDisable.setToolTipText("點擊此按鈕,將使中間按鈕失效!");
        btnMiddle.setToolTipText("點擊此按鈕,不會觸發任何事件!");
        btnEnable.setToolTipText("點擊此按鈕,將使中間按鈕啟用");

        // 加入面板
        add(btnDisable);
        add(btnMiddle);
        add(btnEnable);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        if ("disable".equals(cmd)) {
            btnMiddle.setEnabled(false);
            btnDisable.setEnabled(false);
            btnEnable.setEnabled(true);
        } else { // "enable"
            btnMiddle.setEnabled(true);
            btnDisable.setEnabled(true);
            btnEnable.setEnabled(false);
        }
    }

    // 載入圖示的輔助方法
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = ButtonDemo.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("找不到圖示檔案:" + path);
            return null;
        }
    }

    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("ButtonDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ButtonDemo panel = new ButtonDemo();
        panel.setOpaque(true);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
    }
}

核心功能解析

功能方法/屬性說明
圖示與文字相對位置setVerticalTextPosition(), setHorizontalTextPosition()控制圖示相對文字的垂直/水平位置(TOP, CENTER, BOTTOM / LEFT, CENTER, RIGHT, LEADING, TRAILING)
助鍵setMnemonic(int keyCode)設定 Alt+鍵 快速鍵,需配合字母大寫常數(KeyEvent.VK_*)
動作指令setActionCommand(String)為按鈕指定識別字串,事件處理時透過 e.getActionCommand() 判斷來源
啟用狀態setEnabled(boolean)動態控制按鈕是否可互動,停用時外觀會變灰且不觸發事件
工具提示setToolTipText(String)滑鼠懸停時顯示說明文字
事件處理implements ActionListener面板類別實作介面,統一處理多個按鈕事件

設計重點

  1. 資源載入:使用 Class.getResource() 載入圖示,支援 JAR 內資源存取,避免路徑問題。
  2. 狀態機邏輯:三個按鈕互為狀態切換,透過 ActionCommand 區分來源,集中在 actionPerformed 中處理。
  3. 介面實作:面板實作 ActionListener,避免匿名內部類別過多,適合簡單 UI 邏輯。

執行畫面預期

  • 啟動時:中間按鈕啟用,左邊按鈕啟用,右邊按鈕停用(灰色)。
  • 點擊「停用中間按鈕」:中間按鈕變灰、左邊按鈕變灰、右邊按鈕啟用。
  • 點擊「啟用中間按鈕」:恢復初始狀態。
  • 按下 Alt+D / Alt+M / Alt+E 可觸發對應按鈕。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved