当前位置: 首页 > 面试题库 >

如何使GridBagLayout遵守按钮或面板的最小尺寸?

宦翔飞
2023-03-14
问题内容

在下面的GridBagLayout代码中,我期望在调整JFrame的大小以使其较小时,将遵守JButton
btn2的指定最小大小。但是当我减小JFrame时,btn2变得小于其最小大小,然后消失了。

有人可以指出我做错事情的正确方向吗?也许我必须设置包含按钮的JPanel的最小大小?

任何帮助表示赞赏,谢谢!

    JFrame frame = new JFrame();
    frame.setSize(400,300);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setMinimumSize(new Dimension(400,300));
    panel.setBackground(Color.RED);

    panel.setLayout(new GridBagLayout());
    GridBagConstraints gbc = null;

    JButton btn1 = new JButton("btn1");
    btn1.setPreferredSize(new Dimension(150,50));
    btn1.setMinimumSize(new Dimension(150,50));
    gbc = new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 
            GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
            new Insets(0,0,0,0), 0, 0);
    panel.add(btn1, gbc);

    JButton btn2 = new JButton("btn2");
    btn2.setPreferredSize(new Dimension(150,150));
    btn2.setMinimumSize(new Dimension(150,150));
    gbc = new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, 
            GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
            new Insets(0,0,100,100), 0, 0);
    panel.add(btn2, gbc);

    frame.getContentPane().add(panel);
    frame.setVisible(true);

问题答案:

也许我必须设置包含按钮的JPanel的最小大小?

AFAIR
GBL因忽略大小提示而臭名昭著。不,对此有更正。要在GBL中合理调整组件的大小,请使用GridBagConstraints适当的值。但是请注意,布局的行为不会显示任何被迫小于其最小尺寸的组件。

pack()然后,我会在框架上设置最小尺寸。这是它的外观,将最后一行更改为..

frame.pack();
frame.setVisible(true);
frame.setMinimumSize(frame.getSize());

鉴于布局,虽然,我会倾向于把btn1PAGE_STARTBorderLayout那个,然后添加到面板的LINE_START另一BL的。
btn2将进入CENTER外部BL。



 类似资料:
  • 问题内容: 我有以下代码: 如您所见,我要在单击按钮时更改大小。可能吗?上面的代码不起作用,我的意思是大小没有改变。如何动态更改尺寸? 感谢致敬。编辑: 交换选择一个JList行的面板。 ViewPanel#changeView(),这将交换面板: 问题答案: 使用布局管理器时,永远不要使用setSize()。布局管理器的工作是确定大小。您可以通过设置指定的大小或最小或最大大小来向布局管理器提供提

  • 我使用spring Boot创建了压缩响应的配置。下面是我的配置。 问题是所有的响应都有header[Content-Encoding gzip],即使响应大小小于min响应大小,默认为2048字节。

  • 及其等效的WinApi是流行且有用的宏。原则上,它们使用上的指针算法来恢复指向成员的给定指针所属聚合的指针。 极简主义的实现通常是: 然而,这个宏的使用模式的严格符合性是有争议的。例如: 据我了解,该程序不严格合规,因为: < li >表达式< code>s.b是< code>int类型的左值 < li > <代码> 我注意到问题不在于< code>container_of宏本身。而是构造< co

  • PHP不遵守上载\u最大\u文件大小 详细信息:使用 和. conf中搜索grep-inrupload_max_filesize,只返回12M值。搜索 /etc/httpd/conf/ /etc/httpd/conf.d/显然是虚拟主机的根。在grep返回0结果的虚拟主机中没有特殊设置。

  • 问题内容: 是否可以在JDialog中添加最大化/最小化按钮?如果不是,那么我们可以将这些按钮添加到JPanel吗? 我有一个JPanel,并且在该面板内部有一个JDialog。我想添加一个最小化/最大化按钮,以便当单击该按钮时,JDialog会根据JPanel调整JDialog下的组件。就像当我单击最大化时,jpanel应该被放大,并且该面板(JDialog)中的组件也被放大,反之亦然,以最小化