文本輸入框包括兩種,單行文本輸入框 (JTextField) 和多行文本輸入框 (JTextArea)。密碼輸入框則只有一種 (JPasswordField)。JPasswordField 是 JTextField 的子類,它們的主要區別是 JPasswordField 不會顯示出用戶輸入的東西,而只會顯示出程序員設定的一個固定字符,比如 '*'。
下面的示例圖和代碼是 JTextField、JPasswordField 和 JTextArea 的示例:
/** * TestTexts.java * @author Fancy */ import javax.swing.*; import javax.swing.event.*; public class TestTexts extends JFrame { private JLabel label = new JLabel("Status"); private JTextField textField; private JPasswordField pwdField; private JTextArea textArea; public TestTexts() { super("Test Texts"); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().setLayout(new java.awt.FlowLayout()); textField = new JTextField(15); /* 監聽文本光標移動事件 */ textField.addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent e) { // 如果改變了內容,就可以即時更新 label 顯示的內容 label.setText(textField.getText()); } }); pwdField = new JPasswordField(15); pwdField.setEchoChar('#'); textArea = new JTextArea(5, 15); textArea.setLineWrap(true); getContentPane().add(textField); getContentPane().add(pwdField); getContentPane().add(textArea); getContentPane().add(label); setSize(200, 200); } public static void main(String[] args) { TestTexts tt = new TestTexts(); tt.show(); } } |
上例中,我們構造了一個寬度爲 15 個字符的單行文本框 (textField = new JTextField(15);),並使用 addCaretListener 方法添加了一個 CaretListener (textField.addCaretListener ...)。CaretListener 監聽文本光標的移動事件。當用戶使用鍵盤、鼠標等移動了文本光標在 JTextField 中的位置時觸發這個事件。我們需要重載 caretUpdate(CaretEvent e) 對事件進行處理 (public void caretUpdate(CaretEvent e) ...)。這樣,我們可以在這裏做類似 VB 中 TextBox 的 OnChange 事件中做的事情。
JTextField 有 5 個構造方法,常用其中的四個:
JTextField()
JTextField(int columns),如上例 textField = new JTextField(15);
JTextField(String text)
JTextField(String text, int columns)
其中,參數 text 是單行文本框的初始內容,而 columns 指定了單行文本框的寬度,以字符爲單位。JTextField 中的文本內容可以用 getText() 方法獲得。也可以用 setText 方法指定 JTextField 中的文本內容。
JPasswordField 是 JTextField 的子類,其構造方法也是類似的。JPasswordField 提供了 setEchoChar(char ch) 方法設置爲了隱藏密碼而顯示的字符,默認爲 '*' 字符,上例中則設置爲了 '#' 字符 (pwdField.setEchoChar('#');)。與 JTextField 一樣,JPasswordField 也用 getText 方法和 setText 獲得或者設置文本內容 (當然在用戶界面上是隱藏的)。
JTextField 是單行文本框,不能顯示多行文本,如果想要顯示多行文本,就只好使用多行文本框 JTextArea 了。JTextArea 有六個構造方法,常用的也是四個:
JTextArea()
JTextArea(int rows, int columns)
JTextArea(String text)
JTextArea(String text, int rows, int columns)
text 爲 JTextArea 的初始化文本內容;rows 爲 JTextArea 的高度,以行爲單位;columns 爲 JTextArea 的寬度,以字符爲單位。如上例中就構造了一個高 5 行,寬 15 個字符的多行文本框 (textArea = new JTextArea(5, 15);)。
多行文本框默認是不會自動折行的 (不過可以輸入回車符換行),我們可以使用 JTextArea 的 setLineWrap 方法設置是否允許自動折行。setLineWrap(true) 是允許自動折行,setLineWrap(false) 則是不允許自動折行。多行文本框會根據用戶輸入的內容自動擴展大小,不信,自己做個實驗——如果不自動折行,那麼多行文本框的寬度由最長的一行文字確定的;如果行數據超過了預設的行數,則多行文本框會擴展自身的高度去適應。換句話說,多行文本框不會自動產生滾動條。怎麼辦?後面講到滾動窗格 (JScrollPane) 的時候,你就知道了。
多行文本框裏文本內容的獲得和設置,同樣可以使用 getText 和 setText 兩個方法來完成。