Java 您可以在JFrame中为JPanel设置永久大小吗?
我目前的问题是,我有一个带有2x2网格布局的JFrame。在其中一个方格内,我有一个JPanel,用来显示一个网格。我在java swing库中度过了一个愉快的一天。。。看一看 Java自动扩展每个JLabel以适应屏幕。我希望它只是那些蓝色的正方形(水)和黑色的边框,而不是灰色的空间。有没有一种方法我可以永久地设置JPanel的大小,这样我就不必在得到确切的尺寸之前改变JFrame的大小一百万次,这样灰色空间就消失了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用于按钮
我还想设置这些按钮的大小,使它们不会太大(
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,如果你不想所有的按钮都是相同大小的话。将所有按钮添加到该内面板,而不是主面板。请更新图像!