2008-09-24 381 views
8

我在寫一個自定義文件選擇組件。在我的用戶界面中,首先用戶點擊一個按鈕,彈出一個JFileChooser;當它關閉時,所選文件的絕對路徑將被寫入JTextFieldJava,Swing:如何設置JTextField的最大寬度?

問題是,絕對路徑通常很長,導致文本字段放大,使其容器太寬。

我已經試過這一點,但什麼也沒做,文本字段仍然是太寬:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647)); 

目前,當它是空的,它已經長400像素,由於GridBagConstraints附到它。

我希望它像HTML頁面中的文本字段,它具有固定的大小,並且在輸入過長時不會放大。

那麼,如何設置JTextField的最大尺寸?

回答

12

它可能取決於您的文本字段所在的佈局管理器。某些佈局管理器擴展了一些佈局管理器,有些佈局管理器不支持。有些只在某些情況下擴展,有些則總是擴展。

我假設你正在做的

filedNameTextField = new JTextField(80); // 80 == columns 

如果是這樣,最合理的佈局,該字段應該不會改變大小(至少,它不應該增長)。佈局經理在投入JScrollPane時經常表現不佳。

根據我的經驗,試圖通過setMaximumSizesetPreferredWidth等等來控制尺寸最好是不穩定的。 Swing自己和佈局經理一起決定,你可以做些什麼。

所有的說法,我沒有遇到過的問題,這導致我相信一些明智地使用佈局管理器可以解決問題。

3

我通過使用setMaximumSize設置文本字段容器的最大寬度來解決此問題。

根據davetron的回答,這是一個脆弱的解決方案,因爲佈局經理可能會忽視該屬性。就我而言,容器是最頂級的,並且在第一次測試中起作用。

+0

是的,不幸的是,它與Swing的關係如何。在很多方面它都是一個很好的工具包,但不同佈局管理器中組件的不可預測性實際上令人討厭。 – davetron5000 2008-09-24 17:24:55

3

不要在文本字段上設置任何尺寸。而應通過setColumns將列大小設置爲非零值,或使用帶有列參數的構造函數。

正在發生的事情是JTextComponent在列爲零時報告的首選大小是呈現文本所需的全部空間量。當列設置爲非零值時,首選大小是顯示許多標準列寬所需的大小。 (對於可變間距字體,它通常接近小寫'm'的大小)。將列設置爲零時,文本字段會請求儘可能多的空間,因爲它可以獲取並伸出整個容器。

由於您已經在GridBagLayout中使用了填充,因此您可以將列設置爲1並讓填充根據其他組件或其他適當的低數字來擴展它。

+1

我在使用FlowLayout的時候推薦這種方法。 – sworisbreathing 2011-11-18 23:20:59

相關問題