java - 二维按钮网格的最佳 Swing 布局?

标签 java swing layout-manager grid-layout flowlayout

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

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

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

  1. 调整对话框大小时,创建一个新的 GridLayout 并用按钮重新填充它。我打算尝试一下,看看效果如何,但这似乎是一种笨拙的做法。
  2. 使用其他类型的布局,例如 FlowLayout。我试了一下,但它把所有 n x m 按钮排成一排。我不想使用水平滚动条并且按钮超出了右边缘。不管怎样,它应该是一个二维的按钮网格。

解决此布局问题的最佳方法是什么?

最佳答案

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

关于java - 二维按钮网格的最佳 Swing 布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732058/

相关文章:

java - 如何使用 Maven 在 Java 单元测试中处理冲突的外部库版本

java - 选中jCheckBox1,取消选中jCheckBox2

java - 为 Swing 应用程序选择哪个 LayoutManager?

java - 为什么Android应用程序不需要main方法

java - Nohup 附加输出和错误而不是覆盖

java - JTable 1点边框不出现在网格线上

java - swing调用父窗体的方法

Java MigLayout非法约束 'dock'

java - Swing:如何用TableLayout添加两个JScrollPanes?

java - 处理具有未知异常类的堆栈跟踪