8.3 文本輸入
在java中,能夠用于文本輸入的組件包括JTextField(文本框)、JTextArea(文本區(qū))以及 JPasswordField(密碼框),JLabel(標簽)不支持文本輸入,但可以容納文本。
8.3.1 JTextFileld 文本框
JTextField文本框是一個允許編輯單行文本的swing組件,JTextField提供了多個構造方法用于創(chuàng)建JTextField對象。具體見下表8-3。
表8-3 JTextField構造方法
構造方法 |
說明 |
public JTextField() |
構造一個新的 TextField。初始字符串為 null,列數(shù)為 0 |
public JTextField(Stringtext) |
構造一個用指定文本初始化的新TextField。列數(shù)為 0 |
public JTextField(intcolumns) |
構造一個具有指定列數(shù)的新的空TextField。初始字符串為 null。 |
public JTextField (Stringtext,intcolumns) |
構造一個用指定文本和列初始化的新 TextField。text:文本值,columns:列數(shù) |
JTextField有兩個重要的方法setText(String t)和getText()分別用于設置文本框的顯示文本和獲取當前文本框的文本。不過這兩個方法都不是JTextField本身提供的方法,而是其父類JTextComponent所提供的。
JTextField類可引發(fā)ActionEvent事件,當用戶在文本框中按下回車鍵時觸發(fā)。
8.3.2 JTextArea 文本區(qū)
JTextArea文本區(qū)是一個允許編輯多行文本的swing組件,JTextArea提供了多個構造方法用于創(chuàng)建JTextArea對象。具體見下表8-4。
表8-4 JTextArea構造方法
構造方法 |
說明 |
JTextArea() |
構造新的 TextArea。初始字符串為 null,行/列設置為 0。 |
JTextArea(Stringtext) |
構造顯示指定文本的新的 TextArea。行/列設置為 0 |
|
JTextArea(introws, |
構造具有指定行數(shù)和列數(shù)的新的空 TextArea。初始字符串為 null |
JTextArea(Stringtext, introws,intcolumns) |
構造具有指定文本、行數(shù)和列數(shù)的新的 TextArea。text:文本值,rows:行數(shù),columns:列數(shù) |
因為JTextArea是JTextComponent的直接子類,因此與JTextField一樣,也可以通過setText(String t)和getText()方法設置和獲取文本區(qū)的文本值。
JTextArea類可引發(fā)ActionEvent事件,當用戶在文本區(qū)中按下回車鍵時觸發(fā)。
8.3.3 JPasswordField密碼框
在AWT組件中,并沒有單獨的密碼框組件,而是通過TextField的一個setEchoChar()方法來得到密碼框,但在Swing中則單獨通過一個類JPasswordField來表示。密碼框是文本框JTextField組件的簡單擴展。因此,其構造方法與JTextField相類似,這里不再介紹。JPasswordField類中有幾個重要方法,如下:
表8-5 JPasswordField類常用構造方法
成員方法 |
說明 |
public char[] getPassword() |
獲得密碼的字符數(shù)組表示,用來替代getText()方法 |
public void setEchoChar(charc) |
設置此 JPasswordField 的回顯字符 |
public char getEchoChar() |
返回要用于回顯的字符 |
8.3.4 JLabel標簽
JLabel是一個靜態(tài)組件,該組件可以顯示一行靜態(tài)文本,一般只是一個說明性的文字,而不接受用戶的輸入,也無事件響應。
JLabel提供了如下方法用于構建JLabel對象
表8-6 JLabel構造方法
構造方法 |
說明 |
JLabel() |
創(chuàng)建無圖像并且其標題為空字符串的 JLabel類對象 |
JLabel(Iconimage) |
創(chuàng)建具有指定圖像的 JLabel類對象 |
public JLabel(Iconimage, inthorizontalAlignment) |
創(chuàng)建具有指定圖像和水平對齊方式的 JLabe類對象 |
JLabel(Stringtext) |
創(chuàng)建具有指定文本的 JLabel類對象 |
JLabel(Stringtext,Iconicon, inthorizontalAlignment) |
創(chuàng)建具有指定文本、圖像和水平對齊方式的 JLabel類對象 |
JLabel(Stringtext, inthorizontalAlignment) |
創(chuàng)建具有指定文本和水平對齊方式的 JLabel類對象 |
構造方法中各參數(shù)意義
Image:顯示在JLabel上的圖標。
horizontalAlignment:JLabel上文字的對齊方式,其值為int枚舉型,值包括SwingConstants.LEFT、SwingConstants.CENTER、SwingConstants.RIGHT、SwingConstants.LEADING 和 SwingConstants.TRAILING。
text:顯示在JLabel上的文字。
以下的例8-4演示了本節(jié)中所介紹的各個組件的用法,界面可提供用戶輸入用戶名和密碼,按下回車后在JTextArea顯示區(qū)顯示用戶輸入的用戶名和密碼信息,不允許用戶名或密碼為空。
[例8-4]
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class TextInputTest extends JFrame{
private JTextField userName = new JTextField(10);
private JTextArea ta = new JTextArea(4,10);
private JPasswordField password = new JPasswordField(10);
private JLabel label1 = new JLabel("用戶名");
private JLabel label2 = new JLabel("密 碼");
public TextInputTest(String title){
super(title);
password.setEchoChar('*');//設置回顯字符
Container contentPane = this.getContentPane();
JPanel panelNorth = new JPanel();
JPanel panelCenter = new JPanel();
panelNorth.add(label1);
panelNorth.add(userName);
panelCenter.add(label2);
panelCenter.add(password);
contentPane.add(panelNorth,BorderLayout.NORTH);
contentPane.add(panelCenter,BorderLayout.CENTER);
contentPane.add(ta,BorderLayout.SOUTH);
pack();
//監(jiān)聽userName和password控件
userName.addActionListener(new MyActionListener());
password.addActionListener(new MyActionListener());
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

