Java圖形用戶界面設計5

四. 文本輸入框、密碼輸入框

  文本輸入框包括兩種,單行文本輸入框 (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 兩個方法來完成。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章