java核心技術卷 之文本輸入

        文本域(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 )

創逑一個滾動窗格,用來顯示指定組件的內容當組件內容超過顯示範圍時,滾動條會自動地出現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章