3

我正在创建一个带有网格布局的 GUI。我已直接向其中添加了 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。我尝试设置最大尺寸,最小尺寸和所有,他们没有改变任何。请帮忙。

4

3 回答 3

5
  1. 普通的GridLayout不可能,因为这是此布局管理器的基本功能

  2. 使用正确的布局管理器GridBagLayout或今天的 MigLayout

  3. 非常简单的方法是使用SpringLayout

于 2012-06-08T17:38:52.230 回答
2

@mKorbel 和 @Logan 在他们的答案中有一点,但如果你出于某种原因真的真的真的需要使用 GridLayout 并且你真的需要 JTextField 保持一定的大小,那么你可以通过将 JTextField 放在 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 文件。

于 2012-06-08T17:55:51.353 回答
0

这是 gridLayout 的默认行为。我不确定阻止它是否容易。我会改用 gridBagLayout 。您可以将每个单元格的填充设置为无。一开始比较困难,但我现在只用它。

于 2012-06-08T17:44:07.597 回答