cap*_*onk 0 java swing jbutton layout-manager
我正在尝试用java swing创建一个棋盘游戏,但我对布局感到非常困惑.目前我正在尝试创建用户看到的图像.为了做到这一点,我使用了BorderLayout(我只需要使用Border-grid-flow布局),我认为我会在东南西北部放置一些工作人员,并在中心放置基本板.问题是我必须创建使用JButton移动棋子的路径(其余空间应该留空)并且该路径需要具有特定的十字形状:http://i59.tinypic.com/eileys.png和尺寸应该比平常小.对于初学者,我尝试使用带有gridlayout的JPanel(放入中心),但无论我做什么(如setPreferredSize()),按钮都会调整大小以填充空间.这是我的代码.感谢您的时间,任何提示都会有所帮助!编辑:
package projtest1;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Board extends JFrame
{
public Board()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Border Layout");
setMinimumSize(new Dimension(1280, 768));
setSize(1280, 768);
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(new JButton("North"), BorderLayout.NORTH);
contentPane.add(new JButton("South"), BorderLayout.SOUTH);
contentPane.add(new JButton("West"), BorderLayout.WEST);
contentPane.add(new JButton("East"), BorderLayout.EAST);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(3, 1, 1, 1));
buttonPanel.setSize(new Dimension (800,800));
JPanel topButtonPanel = new JPanel();
JPanel middleButtonPanel = new JPanel();
JPanel lastButtonPanel = new JPanel();
topButtonPanel.setLayout(new GridLayout(6, 3, 1, 1));
middleButtonPanel.setLayout(new GridLayout(3, 15, 1, 1));
lastButtonPanel.setLayout(new GridLayout(6, 3, 1, 1));
topButtonPanel.setSize(new Dimension (100,300));
//topButtonPanel.setMinimumSize(new Dimension (100,300));
middleButtonPanel.setSize(new Dimension (700,100));
lastButtonPanel.setSize(new Dimension (100,300));
for (int i=0; i<18; i++)
{
JButton button = new JButton("(" + i + ")");
button.setFont(new Font("",Font.BOLD,10));
button.setPreferredSize(new Dimension(4, 4));
topButtonPanel.add(button);
}
for (int i=0; i<45; i++)
{
JButton button = new JButton("(" + i + ")");
button.setFont(new Font("",Font.BOLD,10));
button.setPreferredSize(new Dimension(4, 4));
middleButtonPanel.add(button);
}
for (int i=0; i<18; i++)
{
JButton button = new JButton("(" + i + ")");
button.setFont(new Font("",Font.BOLD,10));
button.setPreferredSize(new Dimension(4, 4));
lastButtonPanel.add(button);
buttonPanel.add(topButtonPanel);
buttonPanel.add(middleButtonPanel);
buttonPanel.add(lastButtonPanel);
}
contentPane.add(buttonPanel, BorderLayout.CENTER);
setContentPane(contentPane);
}
}
Run Code Online (Sandbox Code Playgroud)
我会试着告诉你一种方法来获得这样的董事会:

只使用FlowLayout和GridLayout
你需要的第一件事是JPanel包含董事会.如果您愿意,可以使用BorderLayout将其放在Frame的中心.
----------------------
| |
| |
| |
| |
| mainpanel |
| |
| |
| |
----------------------
Run Code Online (Sandbox Code Playgroud)
我们将给它一个FlowLayout,它可以包含不同大小的其他组件.但是Flowlayout太动态了所以我们需要修复整个面板的大小并设置resizable(false).
根据图片我们计算15x15按钮,所以为了简单起见,我们设置600x600面板的大小(每个Button都有40x40像素)
接下来,我们向面板添加一些其他组件.有一个叫做的swing组件Filler - 它只会填充空白区域,我们需要一些JPanel我们将按钮放入的位置.
----------------------
| | | |
| 1 | 2 | 3 |
|_______|_____|_______|
| | | |
| 4 | 5 | 6 |
|_______|_____|_______|
| | | |
| 7 | 8 | 9 |
| | | |
----------------------
Run Code Online (Sandbox Code Playgroud)
组分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));
Run Code Online (Sandbox Code Playgroud)
三维尺寸将确保填充物的最小和最大尺寸为240x240像素.
组件2,4,5,6和8是JPanels.并且需要按以下顺序将它们添加到主面板中:
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
Run Code Online (Sandbox Code Playgroud)
好了,现在我们有基本的组成部分,你可以看到,它们形成某种交叉的......
我们的小组将包含buttons,将所有有网格布局
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));
Run Code Online (Sandbox Code Playgroud)
panel5可以忽略..实际上它现在只是我们的填充物.
现在,您创建一个72(!!)的列表,JButtons就像在上面的循环中一样.第18个按钮添加到panel2,接下来的18个按钮添加到panel4,在接下来的18到panel6最后18个按钮panel8.
你有它.
_____________________________
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
|___________|_|_|_|___________|
|_|_|_|_|_|_| |_|_|_|_|_|_|
|_|_|_|_|_|_| |_|_|_|_|_|_|
|_|_|_|_|_|_|_____|_|_|_|_|_|_|
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
| |_|_|_| |
|___________|_|_|_|___________|
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |