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



我正在尝试创建一个JDialog,就像Microsoft Word中的Symbol对话框一样,您可以通过选择Symbol…从插入菜单中选择。基本上,它是一个n x m (nm直到运行时才知道)小按钮网格。我有这个工作的第一个版本很好地使用GridLayout。问题是,当您调整对话框的大小时(需要能够调整对话框的大小),按钮的大小也会发生变化。我需要按钮的大小保持不变。

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

我想到了几个方法来解决这个问题:

  1. 当对话框调整大小时,创建一个新的GridLayout并重新填充按钮。我要试试这个,看看它看起来如何,但这似乎是一个笨拙的方式来做它。
  2. 使用其他类型的布局,如FlowLayout。我尝试了一下,但是它把所有的n x m按钮放在一行中。我不想使用水平滚动条和按钮跑出右边缘。无论如何,它应该是一个二维的按钮网格。

解决这个布局问题的最好方法是什么?

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

查看BoxLayout教程

Very Very基本示例:

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);
    }

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

我在单列按钮上遇到了类似的问题,并发现MiGLayout(第三方,在这里可用)在这方面简单有效。它有助于创建网格和设置按钮大小,尽管我花了一两天的时间来适应它的语法。

关键是设置按钮大小;当然,GridLayout看起来像是一个布局的方式,好吧,一个网格。我没有测试过,但我怀疑内置的setXSize()方法也会起作用。GridBagLayout教程中有一些关于大小/定位的示例。

FlowLayout将是一种方式,但你可能有一些配置问题。父组件使用什么布局管理器?

相关内容

  • 没有找到相关文章

最新更新