首页 文章

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

提问于
浏览
3

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

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

我想过几种方法可以解决这个问题:

  • 调整对话框大小后,创建一个新的GridLayout并使用按钮重新填充它 . 我打算尝试一下,看看它看起来如何,但这似乎是一种笨拙的做法 .

  • 使用其他类型的布局,例如FlowLayout . 我对此进行了一次尝试,但它将所有n x m个按钮放在一行中 . 我不想使用水平滚动条,按钮从右边缘移开 . 无论如何,它应该是一个按钮的二维网格 .

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

4 回答

  • 2

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

    Wrap Layout可能正是您要找的 .

  • 2

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

    看看BoxLayout Tutorial

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

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

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

  • 2

    FlowLayout将是你要走的路,但你可能会遇到一些配置问题 . 父组件使用什么布局管理器?

相关问题