二维网格按钮的最佳摆动布局?

时间:2011-04-20 14:33:10

标签: java swing layout-manager grid-layout flowlayout

我正在尝试通过从插入菜单中选择符号... 来创建类似Microsoft Word中的符号对话框的JDialog。基本上,它是 n x m n m 直到运行时才知道)网格的小按钮。我有一个使用GridLayout很好地工作的第一个版本。问题是当你调整对话框的大小(并且要求你应该能够调整它的大小)时,按钮的大小会改变。我需要按钮的大小保持不变。

但我希望包含按钮的网格尺寸发生变化。例如,如果对话框变宽,但保持相同的高度,则行数应减少,而列数增加。

我想过几种解决方法:

  1. 调整对话框大小时,创建一个新的GridLayout并使用按钮重新填充它。我打算尝试一下,看看它看起来如何,但这似乎是一种笨拙的做法。
  2. 使用其他类型的布局,例如FlowLayout。我对此进行了尝试,但它将所有 n x m 按钮放在一行中。我不想使用水平滚动条,按钮从右边缘移开。无论如何,它应该是一个二维网格按钮。
  3. 解决此布局问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

使用GridLayout创建一个按钮面板,并设置一个固定大小(当然可以在运行时计算)。按钮面板应包含在BoxLayout面板中。

查看BoxLayout Tutorial

非常非常基本示例:

public static void main(String[] args) throws Exception
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel buttonPanel = new JPanel();
        JPanel containerPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(2,2));
        buttonPanel.add(new JButton("1"));
        buttonPanel.add(new JButton("2"));
        buttonPanel.add(new JButton("3"));
        buttonPanel.add(new JButton("4"));
        buttonPanel.setPreferredSize(new Dimension(300, 400));
        containerPanel.add(buttonPanel);

        frame.getContentPane().add(containerPanel);
        frame.pack();
        frame.setVisible(true);
    }

答案 1 :(得分:2)

我在一列按钮上遇到了类似问题,发现MiGLayout(第三方,可用here)对此非常简单有效。它有助于制作网格和设置按钮大小,虽然我花了一两天时间来习惯它的语法。

但关键是设置按钮大小; GridLayout当然看起来像是一种网格布局。我没有测试过,但我怀疑内置的setXSize()方法也能正常工作。 GridBagLayout tutorial提供了一些关于尺寸/定位可以做的事情的例子。

答案 2 :(得分:2)

FlowLayout将是可行的方法,但您可能遇到一些配置问题。父组件使用什么布局管理器?

答案 3 :(得分:2)

  

如果对话框变宽,但保持相同的高度,则行数应该减少,而列数会增加。

Wrap Layout可能就是你要找的东西。