3

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

图片

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

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

4

4 回答 4

3

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

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

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

于 2008-12-10T23:30:12.260 回答
2

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

或者,您可以在调整窗口大小时将蓝色方块缩放到正确的大小,方法是让每个棋盘格为JPanel带有BorderLayout布局管理器的 a 并将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设计器。在此处下载 Netbeans 。

于 2008-11-25T06:24:36.750 回答
1

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

于 2008-11-25T05:46:33.800 回答
0

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

于 2008-11-26T19:17:11.043 回答