Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 swing JButton的顺序和大小_Java_Swing_Jbutton_Layout Manager - Fatal编程技术网

Java swing JButton的顺序和大小

Java swing JButton的顺序和大小,java,swing,jbutton,layout-manager,Java,Swing,Jbutton,Layout Manager,我试图用JavaSwing创建一个棋盘游戏,但我对布局感到非常困惑。目前,我正在尝试创建用户所看到的图像。为了做到这一点,我使用了BorderLayout(我只需要使用BorderGrid flow布局),认为我将在东南-西北-北部部署一些工作人员,并在中心部署基本板。问题是,我必须创建一条路径,在该路径中,棋子将使用JButtons移动(剩余空间应为空),该路径需要有一个特定的十字形状:而且大小应该比通常的小。首先,我尝试使用带有gridlayout的JPanel(放在中间),但无论我做什么(

我试图用JavaSwing创建一个棋盘游戏,但我对布局感到非常困惑。目前,我正在尝试创建用户所看到的图像。为了做到这一点,我使用了BorderLayout(我只需要使用BorderGrid flow布局),认为我将在东南-西北-北部部署一些工作人员,并在中心部署基本板。问题是,我必须创建一条路径,在该路径中,棋子将使用JButtons移动(剩余空间应为空),该路径需要有一个特定的十字形状:而且大小应该比通常的小。首先,我尝试使用带有gridlayout的JPanel(放在中间),但无论我做什么(比如setPreferredSize()),按钮都会调整大小以填充空间。 这是我的密码。谢谢您的时间,任何提示都会有帮助! 编辑:

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