文本域(JTextField)和文本區(JTextArea)組件 用於獲取文本輸入。文本域只能接收中行文本的輸入,而文本區能夠接收多行文本的輸人。JPassword也只能接收單行文本的輸人,但不會將輸入的內容顯示出來。
這三個類都繼承於JTextComponent類。由於JTextComponent是一個抽象類,所以不能夠構造這個類的對象。另外,在Java中常會看到這種情況。在一個文本域和文本區內獲取(get)、設置(set)文本的方法實際上都是JTextComponent類中的方法。
String getText()
void setText(String text)
獲取或設置文本組件中的文本。
boolean isEditable()
void setEditable( boolean b)
獲取或設置editable特件,這個特性決定了是否可以編輯文本組件中的內容。
文本域
把文木域添加到窗口的常用辦法是將它添加到面板或者其他容器中,這與添加按鈕完全一樣:
JPanel panel = new JPanel();
JTextField textField = new JTextField(“Default input”, 20);
panel.add(textField);
這段代碼將添加一個文本域,同時通過傳遞字符串‚Default input‛進行初始化。構造器的第二個參數設置文本域的寬度,這個示例中,寬度值爲20 列。但是,這裏所說的列不是一個精確的測量單位。一列就是在當前使用的字體下一個字符的寬度。如果希望文本域最多能夠輸人n個字符,就應該把寬度設置爲n列。實際中,這樣做效果並不理想, 應該將最大輸入長度再多設丨〜2個字符。列數只是給AWT設定首選(preferred)大小的一個提示。如果佈局管理器需要縮放這個文本域,它會調整文本域的大小。在JTextField的構造器中設定的寬度並不是用戶能輸入的字符個數的上限。用戶通常不喜歡滾動文本域,因此應該儘量把文本域設置的寬一些。如果需要作運行時重新設置列數,可以使用lsetColirnins方法。
密碼域
密碼域是一種特殊類型的文本域。爲了避免有不良企圖的人看到密碼,用戶輸人的字符不顯示出來。每個輸入的字符都用回顯字符(echo character)表示,典型的回顯字符是星號 (*)。Swing提供了JPasswordField類來實現這樣的文本域。 密碼域是另一個應用模型-視圖-控制器體系模式的例子。密碼域採用與常規的文本域相同的模型來存儲數據,但是,它的視圖卻改爲顯示回顯字符,而不是實際的字符。
JPasswordField(String text, int columns)
構造一個新的密碼域對象:
void setEchoChar(char echo)
爲密碼域設賢回顯字符。注意:獨特的觀感可以選擇自己的回®字符。0表示重新設靑 爲默認的回顯字符。
chart ] getPassword()
返問密碼域中的文本。爲了安全起見,在使用之後應該覆蓋寫返回的數組內容(密碼並不是以String的形式返回,這是因爲字符串在被垃圾回收器回收之前會一直駐留在虛擬機中)。
文本區
有時,用戶的輸入超過一行。正像前面提到的,需要使用JTextArea組件來接收這樣的輸入。在程序中放置一個文本區組件時,用戶就可以輸入多行文本,並用ENTER鍵換行。每行都以一個\n結尾。
在JTextArea組件的構造器中,可以指定文本區的行數和列 數。例如:
textArea = new ]TextArea(8f 40); // 8 lines of 40 columns each
與文本域一樣。出於穩妥的考慮,參數columns應該設置的大 一些另外,用戶並不受限於輸入指定的行數和列數。當輸人 過長時文本會滾動。還可以用setColnmns方法改變列數,用setRows方法改變行數這些數值只是首選太小——佈局管理器可能會對文本區迸行縮放。
如果文本區的文本超出顯示的範,那麼剩下的文本就會被剪掉。可以通過開啓換行特性來避免裁剪過長的行:
textArea.setLineWrap(true); // long lines are wrapped
換行只是視覺效果;文檔中的文本沒有改變,在文木中並沒有插入‘\n‛字符。
滾動窗格
在Swing中,文本區沒有滾動條。如果需要滾動條,可以將文本區插入到滾動窗格 (scroll pane)中。
textArea = new JTextArea(8, 40);
JScrollPane scrollPane = new JScrollPane(textArea);
現在滾動窗格管理文本區的視圖。如果文本超出了文本可以顯示的範圍,滾動條就會自動地出現,並且在刪除部分文本後,當文本能夠顯示在文本區範圍內吋,滾動條會再次自動地消失。滾動是由滾動窗格內部處理的,編寫程序時尤S處理滾動事件。
這是一種爲任意組件添加滾動功能的通用機制,而不是文本區特有的。也就是說,要想爲組件添加滾動條,只需將它們放入一個滾動窗格中即可。
示例代碼:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Created by IBM on 2017/9/18.
*/
public class TextComponentFrame extends JFrame {
public static final int TEXTAAREA_ROWS=8;
public static final int TEXTAAREA_COLUMNS=20;
public static void main(String[]args){
TextComponentFrame text=new TextComponentFrame();
text.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
text.setVisible(true);
}
public TextComponentFrame(){
final JTextField textField=new JTextField();
final JPasswordField passwordField=new JPasswordField();
JPanel northPanel=new JPanel();
northPanel.setLayout(new GridLayout(2,2));
northPanel.add(new JLabel("User name:",SwingConstants.RIGHT));
northPanel.add(textField);
northPanel.add(new JLabel("Password:",SwingConstants.RIGHT));
northPanel.add(passwordField);
add(northPanel,BorderLayout.NORTH);
final JTextArea textArea=new JTextArea(TEXTAAREA_ROWS,TEXTAAREA_COLUMNS);
JScrollPane scrollPane=new JScrollPane(textArea);
add(scrollPane,BorderLayout.CENTER);
JPanel southPanel=new JPanel();
JButton insertButton=new JButton("Insert");
southPanel.add(insertButton);
//按鈕單擊事件
insertButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.append("User name:"+textField.getText()+" Password:"+new String(passwordField.getPassword())+"\n");
}
});
add(southPanel,BorderLayout.SOUTH);
pack();
}
}
運行結果:
JTextArea()
• JTextArea( int rows, int cols)
• JTextArea(String text, i nt rows, Int cols)
構造一個新的文本區對象。
• void setCol umns( int cols)
設置文本區應該使用的首選列數
• void setRows(int rows)
設飩文本區應該使的首選行數
• void append(String newText)
將給定的文本追加到文本區中已有文本的尾部
• void setLineWrap(boolean wrap)
打開或關閉換行。
• void setWrapStyleWord(boolean word)
如果word是tme,超長的行會作字邊框處換行。 如果爲false,超長的行被截斷時不考慮字邊框。
• void setTabSi ze(int c)
將製表符(tab stop)設置爲c列。注意,製表符不會被轉化爲空格,但可以讓文本對齊到下一個製表符處。
Awjjavax.swingJScrollPane 1.2
• JScrol1Pane(Component c )
創逑一個滾動窗格,用來顯示指定組件的內容當組件內容超過顯示範圍時,滾動條會自動地出現。