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

Java AWT Label 標籤完全指南:建構選項、對齊陷阱、動態文字與空標籤限制

     編輯:Java 相關知識

Label 核心功能

  • 純文字顯示元件,不可編輯、無事件互動
  • 為無標籤元件 (TextField, TextArea) 提供說明文字
  • 支援布局管理器排列,優於 paint() + drawString() 硬編碼座標

建構選項

new Label()                    // 空標籤
new Label("text")              // 預設靠左對齊
new Label("text", Label.LEFT)  // 明確靠左
new Label("text", Label.CENTER) // 置中
new Label("text", Label.RIGHT)  // 靠右

完整範例:Label1

//: Label1.java
import java.awt.*;
import java.applet.*;

public class Label1 extends Applet {
    TextField t1 = new TextField("t1", 10);
    Label labl1 = new Label("TextField t1");           // 標記輸入欄
    Label labl2 = new Label(" ");                       // 空白佔位 (空格而非空字串)
    Label labl3 = new Label(" ", Label.RIGHT);          // 靠右對齊空白佔位
    Button b1 = new Button("Test 1"), b2 = new Button("Test 2");

    public void init() {
        add(labl1); add(t1); add(b1);
        add(labl2); add(b2); add(labl3);
    }

    public boolean action(Event evt, Object arg) {
        if (evt.target.equals(b1)) {
            labl2.setText("Text set into Label"); // 動態設定文字
        } else if (evt.target.equals(b2)) {
            if (labl3.getText().trim().length() == 0) labl3.setText("labl3");
            // 循環切換對齊:左 → 中 → 右 → 左
            if (labl3.getAlignment() == Label.LEFT) labl3.setAlignment(Label.CENTER);
            else if (labl3.getAlignment() == Label.CENTER) labl3.setAlignment(Label.RIGHT);
            else if (labl3.getAlignment() == Label.RIGHT) labl3.setAlignment(Label.LEFT);
        } else return super.action(evt, arg);
        return true;
    }
} ///:~

關鍵陷阱與限制

1. 空標籤無法後設文字

  • new Label() 或 new Label("") 建立的標籤,寬度為 0
  • 後續 setText("xxx") 文字不會顯示 (無空間渲染)
  • 解決:初始給予足夠空格 new Label(" ") 或預設文字

2. 文字標籤對齊無效

  • new Label("text", Label.CENTER) 建立後,setAlignment() 無視覺效果
  • 原因:標籤寬度 = 文字寬度,無額外空間可對齊
  • 解決:給予較長初始文字,或放入較大容器 (BorderLayout Center 等) 讓標籤獲得額外空間

3. 空白壓縮問題

  • 等寬字體下空格寬度 = 字元寬度,比例字體下空格較窄
  • setText(" text ") 視覺寬度可能不足容納後續文字
  • 使用 trim() 檢測實際內容長度

現代化對應

技術核心類別增強功能
SwingJLabelHTML 文字支援 (<html><b>bold</b></html>)、圖示 (setIcon())、垂直/水平對齊獨立控制、工具提示、labelFor 關聯元件 (無障礙)
JavaFXLabelCSS 樣式、文字換行/省略 (wrapText, textOverrun)、圖文混排 (graphic)、屬性綁定
Web<label>, <span>語義標籤、for 關聯輸入元件、CSS 完整控制

最佳實踐

  1. 輸入欄位標籤:使用 JLabel.setLabelFor(textField) / <label for="id"> 建立語義關聯,螢幕閱讀器支援、點擊標籤聚焦輸入框。
  2. 動態文字:預估最大長度預留空間,或使用自動換行/省略功能 (Swing HTML / JavaFX wrapText)。
  3. 對齊需求:配合布局管理器 (BorderLayout West+Center, GridBagLayout, MigLayout, JavaFX HBox/VBox) 而非依賴 Label 內部對齊。

總結

Label 是「唯讀文字」的極簡元件。其空標籤無法後設文字、文字寬度鎖定對齊無效是 AWT 歷史包袱。現代 JLabel/Label 提供 HTML/CSS、圖文混排、語義關聯、自動換行省略等豐富功能。理解限制本質 (元件偏好尺寸 = 內容尺寸),能正確選擇布局策略而非怪罪元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved