TextField 核心特性
- 單行文字編輯區域
- 繼承
TextComponent:支援選取、複製、剪貼、游標移動
- 建構選項:
new TextField(), new TextField(text), new TextField(columns), new TextField(text, columns)
columns 影響偏好寬度 (約字元數),非嚴格限制
- Enter 鍵觸發
action() (1.0) / ActionListener (1.1+)
完整範例:TextField1
//: TextField1.java
public class TextField1 extends Applet {
Button b1 = new Button("Get Text"), b2 = new Button("Set Text");
TextField t = new TextField("Starting text", 30);
String s = new String();
public void init() {
add(b1); add(b2); add(t);
}
public boolean action(Event evt, Object arg) {
if (evt.target.equals(b1)) { // 取得文字
showStatus(t.getText());
s = t.getSelectedText();
if (s.length() == 0) s = t.getText(); // 無選取時取全部
t.setEditable(true); // 允許編輯
} else if (evt.target.equals(b2)) { // 設定文字
t.setText("Inserted by Button 2: " + s);
t.setEditable(false); // 唯讀 (但仍可選取)
} else return super.action(evt, arg);
return true;
}
}
關鍵方法與行為
| 方法 | 說明 |
getText() | 取得全部文字內容 |
getSelectedText() | 取得滑鼠選取的文字 (無選取回傳空字串 "",非 null) |
setText(String) | 設定全部文字內容 |
setEditable(boolean) | true=可編輯, false=唯讀 (仍可選取/複製) |
select(start, end) | 程式化選取範圍 |
selectAll() | 全選 |
setEchoChar('*') | 密碼欄位模式 (Java 1.0/1.1),Swing 用 JPasswordField |
事件觸發機制
- Enter 鍵:觸發
ActionEvent / action()
- 文字改變:Java 1.1+
TextListener / DocumentListener (Swing) 即時通知
- 焦點/鍵盤/滑鼠:標準元件事件
現代化對應
| 技術 | 核心類別 | 關鍵增強 |
| Swing | JTextField, JFormattedTextField, JPasswordField | 文檔模型 (Document) 即時監聽/過濾/驗證、格式化輸入 (日期/數字/遮罩)、密碼欄位專用、邊框/內邊距/圖示自訂 |
| JavaFX | TextField, PasswordField, TextFormatter | 屬性綁定 (textProperty())、TextFormatter 過濾/轉換、CSS 樣式、提示文字、清除按鈕 |
| Web | <input type="text/password/email/number/...> | 原生驗證 (pattern, required, type)、自動完成、輸入法整合、CSS 完整控制 |
最佳實踐
- 密碼欄位:Swing 必用
JPasswordField (回傳 char[] 而非 String,用畢立即清零),JavaFX 用 PasswordField。
- 即時驗證/格式化:Swing
DocumentFilter / JavaFX TextFormatter,而非焦點失去後驗證。
- 提示文字:Swing 無原生支援 (需自繪或第三方),JavaFX
setPromptText(),Web placeholder。
- 可編輯性視覺回饋:唯讀欄位建議灰底/邊框變色,區別於可編輯欄位。
總結
TextField 是「單行文字輸入」的基石元件。核心 API (getText/setText/getSelectedText/setEditable) 極簡且穩定。Enter 觸發動作事件是表單提交的經典觸發點。現代框架引入 Document/TextFormatter 實現即時驗證/格式化/過濾,JPasswordField/PasswordField 解決密碼安全殘留問題。掌握基礎行為,輕鬆駕馭進階輸入元件。