【问题标题】:swing question on resize controls on maximize关于最大化调整大小控件的摇摆问题
【发布时间】:2011-04-03 13:39:20
【问题描述】:

我有一个JFrame,具有以下布局和组件:

 _________________________________________ 
 |  __________________________________    | 
 |  |JTree   |   Panel2              | *  |
 |  |(Panel1)| (other controls)      |<-> |
 |  |________|_______________________|    |
 |__________*_____________________________|

这些位于主 JFrame 的内容窗格中。
我想要的是当我最大化窗口时,这些组件会相应地调整大小。
现在发生的情况是它们保持当前大小,并且在我有箭头和星星的地方有一个巨大的差距。(侧面和底部)。
我想保持包装。
我对内容窗格使用了空布局,并从视觉设计器中删除了组件。
如何使控件始终在 mazimize 上调整大小?

【问题讨论】:

    标签: java swing user-interface layout-manager


    【解决方案1】:

    如果您希望两个面板具有相同的大小,每个都占据主窗口的一半,请使用 GridLayout:

    getContentPane().setLayout(new GridLayout(1,2));
    getContentPane().add(Panel1);
    getContentPane().add(Panel2);
    

    如果您希望一个面板具有恒定宽度,请使用 BorderLayout:

    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(Panel1,BorderLayout.EAST);
    getContentPane().add(Panel2,BorderLayout.CENTER);
    

    如果您想要更复杂的行为,例如要保持 1:2 的宽度比例,您将不得不使用 GridBagLayout,这是最强大但也是最复杂的布局:

    getContentPane().setLayout(new GridBagLayout());
    getContentPane().add(Panel1,new GridBagConstaints(0,0,1,1,1,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);
    getContentPane().add(Panel2,new GridBagConstaints(1,0,1,1,2,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);
    

    【讨论】:

      【解决方案2】:

      不要使用空布局,不要使用表单设计器,而是尝试各种布局管理器。 GridBagLayout 可能是可以帮助您根据需要创建 GUI 的管理器之一,但除非必要,否则许多人会尽量避免使用这个。许多还嵌套 JPanel,每个 JPanel 都有自己的布局管理器,因此实际上嵌套了布局管理器。

      【讨论】:

      • 你的意思是我在内容窗格中使用了空布局?嵌套 JPanel 有什么问题?
      • 第一个问题:是的,如果您希望组件随着顶级窗口大小的变化而改变大小,则不能使用空布局。为此,您必须使用布局管理器。对于您的第二个问题:使用嵌套的 JPanel 存在 no 问题,实际上在必须布局的情况下,它是首选。
      • 那么您通过使用视觉设计师解决了您最初的问题?如果是这样,那么恭喜你,让我们将此主题标记为“已解决”。
      • 不要把它当作个人。只是大多数答案只是说不要使用视觉设计师。但另一方面,正在努力建立优秀的视觉设计师,例如netbeans、windows builder 等。我没有成功是因为我对此缺乏了解。不是可视化编辑器问题
      • 我还看到您的问题得到了许多不同的答复,这是一件非常好的事情。全部尝试一下,看看哪种最适合您。
      【解决方案3】:

      如果您搜索 SO,您可能会得到许多不同的意见。但有一个共同的事实:在考虑使用视觉设计器之前,您至少需要对某个布局管理器的工作方式有基本的了解。

      话虽如此,我得到的最好的结果,以及我目前在生产中使用的是伟大的WindowBuilderPro 和作为布局管理器的 MigLayout 的组合。

      我实际上使用 MigLayout 作为表格布局。我将组件放在单元格中,并为每个单元格设置“增长”等属性 - 如果我想扩展调整大小、最小/首选项/最大大小、对齐等。我可以将组件设置为跨单元格,我得到了什么我要。

      WindowBuilder 的伟大之处在于您可以更改生成的代码而不会弄乱设计器,并且生成的代码实际上很漂亮:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多