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