2009-07-13 26 views
3

我不確定GridBagLayoutManager是否是唯一的佈局管理器,但這是我的問題。我在GridBagLayout中水平放置了4個控件。爲了讓這個例子簡單些,每個控件的形式都是1/4,並且每個控件的大小與其他控件的比例相同。這四個控件是JTextField,其中每個文本字段都映射到來自ResultSet的記錄中的列。表單上的其他控件允許用戶瀏覽記錄。GridBagLayout管理器和調整大小控件

如果我從一條記錄導航到另一條記錄,那麼文本字段會更新它們的文本以顯示新數據。但是,文本字段也會根據它們顯示的文本數量成比例地自動調整大小......包含大量數據的文本字段的大小會擴大,並且包含較少數據量的文本字段會被壓扁。如果我在ResultSet中運行了10條記錄,那麼這些控件總是調整自己的大小,而且至少可以說很奇怪。

我想要做的就是防止這些控件調整大小,除非(和直到)底層容器被調整大小。所以,如果我調整窗口的大小,那麼我希望控件調整大小(根據佈局中的「weight x」變量),但我不希望控件調整大小,因爲它們顯示的文本量變得更多或更少。

有人有什麼想法嗎?

+0

我要補充一點,調整大小的行爲不只是一個JTextField的「問題」,但也會發生與其他控件,如的JComboBox等 – user85116 2009-07-13 14:35:05

回答

2

對於JTextField(如內容中提到的),請撥打setColumns(int)以在文本上設置首選大小。

對於JComboBox,請致電setPrototypeDisplayValue(Object)這將導致該值被渲染並且JComboBox的首選大小將根據該值設置。

通常,您可以直接在任何組件上調用setPreferredSize(Dimension)以獲得相同的行爲。一般情況下,如果沒有設置該值是基於組件的一些默認值計算的。 JTextField,JComboBox和大多數JTextComponent衍生物發生了什麼。這些組件的首選大小是由用戶能夠更改的值(文本值,組合框選擇)驅動的。而大多數其他組件(JButton,JCheckBox等)的內容大小並沒有真正改變,當用戶的行爲。設置列和行以及原型顯示值可修復用於計算首選大小的值。