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.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;
}
} ///:~
new Label() 或 new Label("") 建立的標籤,寬度為 0setText("xxx") 文字不會顯示 (無空間渲染)new Label(" ") 或預設文字new Label("text", Label.CENTER) 建立後,setAlignment() 無視覺效果setText(" text ") 視覺寬度可能不足容納後續文字trim() 檢測實際內容長度| 技術 | 核心類別 | 增強功能 |
|---|---|---|
| Swing | JLabel | HTML 文字支援 (<html><b>bold</b></html>)、圖示 (setIcon())、垂直/水平對齊獨立控制、工具提示、labelFor 關聯元件 (無障礙) |
| JavaFX | Label | CSS 樣式、文字換行/省略 (wrapText, textOverrun)、圖文混排 (graphic)、屬性綁定 |
| Web | <label>, <span> | 語義標籤、for 關聯輸入元件、CSS 完整控制 |
JLabel.setLabelFor(textField) / <label for="id"> 建立語義關聯,螢幕閱讀器支援、點擊標籤聚焦輸入框。Label 是「唯讀文字」的極簡元件。其空標籤無法後設文字、文字寬度鎖定對齊無效是 AWT 歷史包袱。現代 JLabel/Label 提供 HTML/CSS、圖文混排、語義關聯、自動換行省略等豐富功能。理解限制本質 (元件偏好尺寸 = 內容尺寸),能正確選擇布局策略而非怪罪元件。