【问题标题】:Can you set a permanent size for a JPanel inside of a JFrame?您可以在 JFrame 中为 JPanel 设置永久大小吗?
【发布时间】:2008-11-25 05:39:15
【问题描述】:

我当前的问题是我有一个带有 2x2 GridLayout 的 JFrame。在其中一个正方形内,我有一个用于显示网格的 JPanel。我正在使用 java swing 库进行实地考察...看看

Image

Java 会自动扩展每个 JLabel 以适应屏幕。我希望它只是那些蓝色方块(水)和黑色边框,而不是那个灰色空间。有没有一种方法可以永久设置该 JPanel 的大小,这样我就不必在获得确切尺寸之前将 JFrame 的大小更改一百万次,从而使灰色空间消失?

我还想设置这些按钮的大小,这样它们就不会那么大(BorderLayout 用于按钮和 TextField)

【问题讨论】:

  • 请更新图片!

标签: java swing size jlabel grid-layout


【解决方案1】:

GridBagLayout 是您真正想要使用的。 GridLayout 将强制布局中每个组件的大小相同,无论您对它们施加什么大小限制。 GridBagLayout 更强大,也更复杂。研究一下the API page。使用GridBagLayout,如果您不希望组件填充整个网格空间,它们甚至可以保持您要求的大小。为了防止组件的大小发生变化,我将设置所有三个可用的大小约束:

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

对于您的按钮,我肯定会使用Bryan 提到的内部面板。如果您不希望所有按钮的大小相同,则可以使用他建议的 GridLayout 或 FlowLayout 。将所有按钮添加到该内部面板而不是主面板。

【讨论】:

    【解决方案2】:

    如果您希望两个棋盘格保持相同大小,则需要将它们分别包含在各自的JPanel 中。将每个父 JPanel 设置为具有GridBagLayout 的布局类型。为每个棋盘组件设置preferedSize,然后将它们添加到各自的容器中。默认情况下,GridBagLayout 应将每个板放置在父 JPanel 的中心。所以随着窗口大小的调整,JPanel父区域会变大或变小,但里面的棋盘组件会保持不变。

    或者,您可以通过将每个棋盘格设置为带有BorderLayout 布局管理器的JPanel 并添加JLabel(具有蓝色背景色) 到其BorderLayout.CENTER 位置。

    至于你的按钮,试试这样:

    JPanel theButtonPanel = new JPanel(new BorderLayout());
    JButton button1 = new JButton("Fire");
    JButton button2 = new JButton("Pass");
    JButton button3 = new JButton("Forfiet");
    
    JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
    innerButtonContainer.add(button1);
    innerButtonContainer.add(button2);
    innerButtonContainer.add(button3);
    
    theButtonPanel.add(innterButtonContainer);
    

    最后,考虑为您的 Swing 用户界面使用设计工具。 Netbeans 内置了一个出色的 UI 设计器。下载Netbeanshere

    【讨论】:

      【解决方案3】:

      如果您可以在顶层框架上setResizeable( false ),则可以将布局管理器设置为空,并通过 setBounds 对每个位置和大小进行硬编码。我就是这样做的(当然取决于调整大小)。

      【讨论】:

        【解决方案4】:

        我已经使用第三方布局管理器TableLayout 成功解决了此类问题。您需要下载它并阅读教程,但关键是在将 JButtons 添加到布局中的位置时将对齐设置为 CENTER。

        【讨论】:

          猜你喜欢
          • 2021-01-16
          • 1970-01-01
          • 2013-01-17
          • 1970-01-01
          • 1970-01-01
          • 2015-11-18
          • 2011-11-30
          • 2012-01-06
          • 2011-05-17
          相关资源
          最近更新 更多