2012-06-08 45 views
3

我创造与网格布局的GUI一个JTextField。我已经直接添加了JTextFields,JButtons和一切。举个例子,像这样,如何阻止越来越重定尺寸的网格布局

JButton b1 = new JButton("Hello"): 
JButton b2 = new JButton("Bye"); 
JTextField t1 = new JTextField(10); 
JTextField t2 = new JTextField(10); 

GridLayout grid = new GridLayout(2,2,2,2); 

JPanel panel = new JPanel(); 
panel.setLayout(grid); 
panel.add(b1); 
panel.add(t1); 
panel.add(b2); 
panel.add(t2); 

在这里,如果用户调整窗口大小,一切都显得非常大。我知道阻止这些获得这些的唯一方法是将所有每个和所有内容添加到具有FlowLayout的单独JPanel中。但那不太实际,因为如果有20个东西,就会有20个JPanel。我尝试设置最大尺寸,最小尺寸和全部,他们没有改变任何。请帮忙。

+0

您应该使用更复杂的带有约束的GridBagLayout或禁用调整大小。 – Sajmon

+0

'GroupLayout'会更适合这个。 'GridLayout'的自然方法是让所有东西都变成相同的大小。 –

+0

雅,GridBag布局将是最好的选择,但个人而言,我不喜欢搞砸它。这就是为什么我总是去其他布局。但是,如果我不能通过回答解决这个问题,那将是我唯一的选择。 –

回答

5
  1. 与普通GridLayout不可能的,因为这是通过使用SpringLayout

  2. 此布局管理

  3. 使用适当的布局管理器GridBagLayout或今天MigLayout

  4. 非常简单的方法是基本特征

+0

我很感兴趣..但是Oracle说:“然而,SpringLayout是非常低级的,因此您只能将它与GUI构建器一起使用,而不是尝试手动编写Spring布局管理器。”你怎么看? –

+0

有趣的描述,则有效espacially为GridBagLayout的,顺便说一句,如果您有任何疑问,再看看广告MigLayout :-) – mKorbel

+0

没有probs,我总是喜欢用手 –

0

也就是网格的默认行为布局。我不确定它很容易阻止它。我会使用gridBagLayout来代替。您可以为每个单元格设置填充为无。开始时比较困难,但现在我只用它。

2

@mKorbel和@Logan在他们的答案中有一点,但如果你真的出于某种原因确实需要使用GridLayout,并且确实需要JTextField保持一定的大小,那么可以通过将JTextField在带有BorderLayout的JPanel中。

JTextField fixedWidthField = new JTextField(); 
JPanel fieldPanel = new JPanel(new BorderLayout()); 
fieldPanel.add(fixedWidthField, BorderLayout.WEST); 

GridLayout grid = new GridLayout(2,2,2,2); 

JPanel panel = new JPanel(); 
panel.setLayout(grid); 
panel.add(b1); 
panel.add(fieldPanel); 
panel.add(b2); 
panel.add(t2); 

我们都建议您使用更高级的布局管理器。我个人喜欢TableLayout,但你需要为此下载一个额外的Jar文件。

+0

+1嵌套。 'JPanel'默认的'FlowLayout'是另一种选择。 – trashgod