Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 您可以在JFrame中为JPanel设置永久大小吗?_Java_Swing_Size_Jlabel_Grid Layout - Fatal编程技术网

Java 您可以在JFrame中为JPanel设置永久大小吗?

Java 您可以在JFrame中为JPanel设置永久大小吗?,java,swing,size,jlabel,grid-layout,Java,Swing,Size,Jlabel,Grid Layout,我目前的问题是,我有一个带有2x2网格布局的JFrame。在其中一个方格内,我有一个JPanel,用来显示一个网格。我在java swing库中度过了一个愉快的一天。。。看一看 Java自动扩展每个JLabel以适应屏幕。我希望它只是那些蓝色的正方形(水)和黑色的边框,而不是灰色的空间。有没有一种方法我可以永久地设置JPanel的大小,这样我就不必在得到确切的尺寸之前改变JFrame的大小一百万次,这样灰色空间就消失了 我还想设置这些按钮的大小,使它们不会太大(BorderLayout用于按钮

我目前的问题是,我有一个带有2x2网格布局的JFrame。在其中一个方格内,我有一个JPanel,用来显示一个网格。我在java swing库中度过了一个愉快的一天。。。看一看

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


我还想设置这些按钮的大小,使它们不会太大(
BorderLayout
用于按钮和文本字段)

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

如果您希望两个棋盘保持相同大小,那么您需要将它们分别包含在各自的
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设计器。下载Netbeans。

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

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

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

对于你的按钮,我肯定会使用一个内面板作为提及。你可以使用他建议的GridLayout或者FlowLayout,如果你不想所有的按钮都是相同大小的话。将所有按钮添加到该内面板,而不是主面板。

请更新图像!