Java開發筆記(一百二十九)Swing的輸入框

Swing的輸入框仍然分紅兩類:單行輸入框和多行輸入框,但與AWT的同類控件相比,它們在若干細節上有所調整。首先說單行輸入框,AWT的單行輸入框名叫TextField,平時輸入什麼字符它便顯示什麼字符,可一旦調用了setEchoChar方法設置回顯字符,TextField立刻變成只顯示密文字符了。然而尷尬之處在於,設置回顯字符以後,就沒有辦法取消原來的回顯設置,輸入框對象今後只能傻乎乎地顯示密文了。如此一來,程序代碼難以判斷某個輸入框究竟會顯示明文仍是密文,也沒法肯定輸入框文字的加密與否。這不可避免會形成混淆,假設有幾個控件都屬於TextField類型,程序員怎知哪一個是文本框,哪一個又是密碼框?難道要在浩如煙海的代碼中尋找那個該死的setEchoChar方法嗎?
鑑於文本框與密碼框擁有不一樣的面貌,並不適合使用同一種類型來表達,故而Swing瓜熟蒂落將它倆拆分爲兩類控件:文本框JTextField與密碼框JPasswordField。前者原樣展現用戶輸入的字符,於是取消了回顯字符設置方法setEchoChar;後者默認將輸入字符顯示爲一個個圓點,固然程序員也能夠調用setEchoChar方法從新設置回顯字符。通過這麼拆分處理,在Swing中無論輸入普通文本仍是輸入密碼,就沒必要擔憂弄錯的狀況了。除此以外,JTextField與JPasswordField的其他方法基本同樣,用起來跟AWT的TextField控件差很少。好比下面的代碼例子演示了JTextField的調用過程:html

		JTextField textField = new JTextField(); // 建立一個單行輸入框
		textField.setEditable(true); // 設置輸入框容許編輯
		textField.setColumns(11); // 設置輸入框的長度爲11個字符
		panel.add(textField); // 在面板上添加單行輸入框

 

運行上述的文本框代碼,彈出以下圖所示的窗口界面,可見一條純粹的文本輸入框。程序員


又如如下代碼演示了密碼框JPasswordField的調用過程:加密

		JPasswordField passwordField = new JPasswordField(); // 建立一個密碼框
		passwordField.setEditable(true); // 設置密碼框容許編輯
		passwordField.setColumns(6); // 設置密碼框的長度爲11個字符
		//passwordField.setEchoChar('*'); // 設置密碼框的回顯字符。默認的回顯字符爲圓點
		panel.add(passwordField); // 在面板上添加密碼框

 

運行以上的密碼框代碼,彈出以下圖所示的窗口界面,可見密碼框的默認回顯字符是個又圓又大的黑點。設計


接着說多行輸入框,AWT的多行輸入框名叫TextArea,該控件有個毛病:用戶往裏面輸入文本,超過一行寬度後不會自動換行,必須用戶按下回車鍵來手動換行。這種設計的使用體驗無疑很糟糕,不能自動換行的話,用戶敲多了回車鍵,確定要怨聲載道了。好在Swing的JTextArea控件及時彌補了這個問題,除了囊括TextArea的現有方法,JTextArea還增長了setLineWrap方法用來設置每行是否容許,調用該方法將其值設置爲true時,日後輸入的文本一旦超過每行寬度就會自動換到下一行。因而添加了setLineWrap方法的多行輸入框調用代碼示例以下:htm

		JTextArea area = new JTextArea(); // 建立一個多行輸入框
		area.setEditable(true); // 設置輸入框容許編輯
		area.setColumns(14); // 設置輸入框的長度爲14個字符
		area.setRows(3); // 設置輸入框的高度爲3行字符
		area.setLineWrap(true); // 設置每行是否容許摺疊。爲true的話,輸入字符超過每行寬度就會自動換行
		panel.add(area); // 在面板上添加多行輸入框

 

運行上面的多行輸入框代碼,彈出以下圖所示的窗口界面,可見輸入框的內部文本的確支持自動換行了。對象


但是跟AWT的TextArea比起來,Swing的JTextArea默認不顯示滾動條,即便文本的總高度已經超過了輸入框的高度,指望中的滾動條仍未出現。這是由於Swing把滾動條也單獨拎了出來,還給它取了個大名叫作JScrollPane,凡是須要上下滾動或者左右滾動的控件,都要搭配上JScrollPane才行。滾動條的用法也挺簡單,只要在構造方法中填入待關聯的控件對象,或者調用滾動條對象的setViewportView方法,都能將滾動條與指定控件綁定在一塊兒。而後在面板上添加滾動條對象,如此便完成了輸入框與滾動條的綁定操做,具體的綁定代碼以下所示:blog

		JTextArea area = new JTextArea(); // 建立一個多行輸入框
		area.setEditable(true); // 設置輸入框容許編輯
		area.setColumns(14); // 設置輸入框的長度爲14個字符
		area.setRows(3); // 設置輸入框的高度爲3行字符
		area.setLineWrap(true); // 設置每行是否摺疊。爲true的話,輸入字符超過每行寬度就會自動換行
		// 由於下面添加滾動條的時候,滾動條已經關聯了JTextArea,因此這裏沒必要單獨添加多行輸入框
		//panel.add(area); // 在面板上添加多行輸入框
		JScrollPane scroll = new JScrollPane(area); // 建立一個滾動條
		//scroll.setViewportView(area); // 設置滾動條關聯的控件
		panel.add(scroll); // 在面板上添加滾動條

 

運行上面的滾動條綁定代碼,彈出以下圖所示的窗口界面,此時在輸入框中填入好幾行文本,在文本總高超過控件高度以後,輸入框右側的滾動條便如約出現了。開發

 



更多Java技術文章參見《Java開發筆記(序)章節目錄get

相關文章
相關標籤/搜索