你能为JFrame中的JPanel设置一个永久大小吗?

时间:2008-11-25 05:39:15

标签: java swing size jlabel grid-layout

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

Image

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

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

4 个答案:

答案 0 :(得分:3)

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。将所有按钮添加到内部面板而不是主面板。

答案 1 :(得分:2)

如果您希望两个棋盘保持相同的大小,那么您需要将它们分别包含在自己的JPanel中。将每个父JPanel设置为具有GridBagLayout的布局类型。为每个棋盘组件设置preferedSize,然后将它们添加到各自的容器中。默认情况下,GridBagLayout应该将每个板放在父JPanel的中心。因此,当窗口调整大小时,JPanel父区域将变大或变小,但内部的棋盘组件将保持相同的大小。

或者,您可以通过让每个棋盘方格为JPanel并使用BorderLayout布局管理器并添加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 here

答案 2 :(得分:1)

如果您可以在顶级框架上setResizeable( false ),则可以将布局管理器设置为null,并通过setBounds对每个位置和大小进行硬编码。这就是我要做的事情(当然要根据大小调整而定)。

答案 3 :(得分:0)

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