Java swing JButton的顺序和大小
我试图用JavaSwing创建一个棋盘游戏,但我对布局感到非常困惑。目前,我正在尝试创建用户所看到的图像。为了做到这一点,我使用了BorderLayout(我只需要使用BorderGrid flow布局),认为我将在东南-西北-北部部署一些工作人员,并在中心部署基本板。问题是,我必须创建一条路径,在该路径中,棋子将使用JButtons移动(剩余空间应为空),该路径需要有一个特定的十字形状:而且大小应该比通常的小。首先,我尝试使用带有gridlayout的JPanel(放在中间),但无论我做什么(比如setPreferredSize()),按钮都会调整大小以填充空间。 这是我的密码。谢谢您的时间,任何提示都会有帮助! 编辑:Java swing JButton的顺序和大小,java,swing,jbutton,layout-manager,Java,Swing,Jbutton,Layout Manager,我试图用JavaSwing创建一个棋盘游戏,但我对布局感到非常困惑。目前,我正在尝试创建用户所看到的图像。为了做到这一点,我使用了BorderLayout(我只需要使用BorderGrid flow布局),认为我将在东南-西北-北部部署一些工作人员,并在中心部署基本板。问题是,我必须创建一条路径,在该路径中,棋子将使用JButtons移动(剩余空间应为空),该路径需要有一个特定的十字形状:而且大小应该比通常的小。首先,我尝试使用带有gridlayout的JPanel(放在中间),但无论我做什么(
package projtest1;
导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.Font;
导入java.awt.GridLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类板扩展JFrame
{
公共委员会()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置标题(“边框布局”);
setMinimumSize(新尺寸(1280768));
设置大小(1280768);
JPanel contentPane=新的JPanel();
setLayout(新的BorderLayout());
添加(新的JButton(“北”),BorderLayout.North);
contentPane.add(新的JButton(“南”),BorderLayout.South);
添加(新的JButton(“西”),BorderLayout.West);
添加(新的JButton(“东”),BorderLayout.East);
JPanel buttonPanel=新的JPanel();
buttonPanel.setLayout(新的GridLayout(3,1,1,1));
按钮面板设置尺寸(新尺寸(800800));
JPanel topButtonPanel=新的JPanel();
JPanel middleButtonPanel=新的JPanel();
JPanel lastButtonPanel=新的JPanel();
topButtonPanel.setLayout(新的GridLayout(6,3,1,1));
设置布局(新的网格布局(3,15,1,1));
setLayout(新的GridLayout(6,3,1,1));
顶部按钮面板设置尺寸(新尺寸(100300));
//顶部按钮面板设置最小尺寸(新尺寸(100300));
中间按钮面板设置尺寸(新尺寸(700100));
lastButtonPanel.setSize(新尺寸(100300));
对于(inti=0;i我将尝试向您展示一种获得这样一块板的方法:
仅使用FlowLayout
和GridLayout
你需要的第一件事是一个JPanel
,它将包含电路板。如果你愿意,你可以将它放在边框布局的框架中心
----------------------
| |
| |
| |
| |
| mainpanel |
| |
| |
| |
----------------------
我们将给它一个FlowLayout
,这样它可以包含不同大小的其他组件。但是FlowLayout
太动态了,所以我们需要固定整个面板的大小,并设置可调整大小(false)
根据图片,我们计算了15x15个按钮,因此为了简单起见,让我们为面板设置600x600
大小(每个按钮都有40x40
像素)
接下来,我们将一些其他组件添加到面板中。有一个称为Filler
的swing组件–它将简单地填充空白,我们需要一些JPanel
s来放置按钮
----------------------
| | | |
| 1 | 2 | 3 |
|_______|_____|_______|
| | | |
| 4 | 5 | 6 |
|_______|_____|_______|
| | | |
| 7 | 8 | 9 |
| | | |
----------------------
组件1、3、7和9是填料。您可以按如下方式初始化它们:
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
filler7 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
filler9 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
这三个维度将确保填充的最小和最大大小为240x240像素
组件2、4、5、6和8是JPanel。它们需要按以下顺序添加到主面板:
JPanel panel2 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
JPanel panel8 = new JPanel();
mainPanel.add(filler1); // component 1
mainPanel.add(panel2); // component 2
mainPanel.add(filler3); // component 3
mainPanel.add(panel4); // component 4
mainPanel.add(panel5); // component 5
mainPanel.add(panel6); // component 6
mainPanel.add(filler7); // component 7
mainPanel.add(panel8); // component 8
mainPanel.add(filler9); // component 9
好了,现在我们有了基本组件,您可以看到它们形成了一种交叉…
我们的面板将包含按钮
,并且所有都将具有网格布局
panel2.setLayout(new java.awt.GridLayout(6, 3));
panel4.setLayout(new java.awt.GridLayout(3, 6));
panel6.setLayout(new java.awt.GridLayout(3, 6));
panel8.setLayout(new java.awt.GridLayout(6, 3));
面板5可以忽略。实际上它现在只是我们的填充物
现在您创建了一个包含72(!!)JButtons
的列表,就像您在上面的循环中所做的那样。
添加到面板2
的前18个按钮、添加到面板4
的下18个按钮、添加到面板6
的下18个按钮和添加到面板8
的最后18个按钮
就在这里
_____________________________
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
|___________|_|_|_|___________|
|_|_|_|_|_|_| |_|_|_|_|_|_|
|_|_|_|_|_|_| |_|_|_|_|_|_|
|_|_|_|_|_|_|_____|_|_|_|_|_|_|
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
|___________|_|_|_|___________|
我将尝试向您展示一种获得这样一块板的方法:
仅使用FlowLayout
和GridLayout
你需要的第一件事是一个JPanel
,它将包含电路板。如果你愿意,你可以将它放在边框布局的框架中心
----------------------
| |
| |
| |
| |
| mainpanel |
| |
| |
| |
----------------------
我们将给它一个FlowLayout
,这样它可以包含不同大小的其他组件。但是FlowLayout
太动态了,所以我们需要固定整个面板的大小,并设置可调整大小(false)
根据图片,我们计算了15x15个按钮,因此为了简单起见,让我们为面板设置600x600
大小(每个按钮都有40x40
像素)
接下来,我们将一些其他组件添加到面板中。有一个称为Filler
的swing组件–它将简单地填充空白,我们需要一些JPanel
s来放置按钮
----------------------
| | | |
| 1 | 2 | 3 |
|_______|_____|_______|
| | | |
| 4 | 5 | 6 |
|_______|_____|_______|
| | | |
| 7 | 8 | 9 |
| | | |
----------------------
组件1、3、7和9是填料。您可以按如下方式初始化它们:
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
filler7 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
filler9 = new javax.swing.Box.Filler(new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240), new java.awt.Dimension(240, 240));
这三个维度将确保填充的最小和最大大小为240x240像素
组件2、4、5、6和8是JPanel。它们需要按以下顺序添加到主面板:
JPanel panel2 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
JPanel panel8 = new JPanel();
mainPanel.add(filler1); // component 1
mainPanel.add(panel2); // component 2
mainPanel.add(filler3); // component 3
mainPanel.add(panel4); // component 4
mainPanel.add(panel5); // component 5
mainPanel.add(panel6); // component 6
mainPanel.add(filler7); // component 7
mainPanel.add(panel8); // component 8
mainPanel.add(filler9); // component 9
好了,现在我们有了基本组件,您可以看到它们形成了一种交叉…
我们的面板将包含按钮
,并且所有都将具有网格布局
panel2.setLayout(new java.awt.GridLayout(6, 3));
panel4.setLayout(new java.awt.GridLayout(3, 6));
panel6.setLayout(new java.awt.GridLayout(3, 6));
panel8.setLayout(new java.awt.GridLayout(6, 3));
面板5可以忽略。实际上它现在只是我们的填充物
现在您创建了一个包含72(!!)JButtons
的列表,就像您在上面的循环中所做的那样。
T