我正在制作国际象棋游戏。我有JFrame我所在的容器,其中包括2d JLabel字段数组。现在我想在我的窗口添加一个工具栏,但是当我想要这样做时,我的棋盘崩溃了。这是我的棋盘窗口看起来像Window的图片。我想在窗口顶部添加工具栏,我可以在这里保存/加载游戏......等等 另外我想在右侧添加一些面板,我可以看到之前的动作。我想知道怎么做而不破坏我的棋盘。 这是我的代码:
public class GUI extends JFrame implements Serializable{
public void initGUI() {
setTitle("Chess game");
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
ImageIcon img = new ImageIcon("pieceImages/whiteKing.png");
contentPane = getContentPane();
GridLayout gridLayout = new GridLayout(8, 8);
contentPane.setLayout(gridLayout);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
labels[i][j]=new JLabel(game.getBoard()[i][j].getImagePath());
contentPane.add(labels[i][j]);
}
}
setIconImage(img.getImage());
setResizable(false);
setSize(600, 600);
setLocationRelativeTo(null);
setVisible(true);
}
我创建了一些JPanel的建议:
public class Toolbar extends JPanel implements Serializable {
public Toolbar(){
JButton newGameBtn = new JButton("New game");
JButton regretBtn = new JButton("Regret move");
add(newGameBtn);
add(regretBtn);
}
}
答案 0 :(得分:2)
您可以将BorderLayout
设置为内容窗格,将工具栏添加到北方,将另一个包含标签的面板添加到中心。
setTitle("Chess game");
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
ImageIcon img = new ImageIcon("pieceImages/whiteKing.png");
contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
Toolbar toolbar = new Toolbar();
JPanel labelsPanel = new JPanel();
GridLayout gridLayout = new GridLayout(8, 8);
labelsPanel.setLayout(gridLayout);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
labels[i][j]=new JLabel(game.getBoard()[i][j].getImagePath());
labelsPanel.add(labels[i][j]);
}
}
contentPane.add(toolbar, BorderLayout.NORTH);
contentPane.add(labelsPanel, BorderLayout.CENTER);
setIconImage(img.getImage());
setResizable(false);
setSize(600, 600);
setLocationRelativeTo(null);
setVisible(true);
另请注意,您可以使用JToolBar,请参阅How to Use Tool Bars
答案 1 :(得分:0)
您可以使用两个面板,一个用于工具栏,另一个面板用作主游戏面板。
因此,在GUI类中,将布局设置为BorderLayout,并使用NORTH约束添加工具栏面板,并使用CENTER约束添加游戏面板。类似的东西:
JFrame frame = new JFrame();
frame.setTitle("Chess game");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
JPanel toolbar = new JPanel(); // stablish any layout...
toolbar.add(new JButton("Save"));
// add the rest of the buttons...
JPanel game = new JPanel(); // this is your current contentPane
GridLayout gridLayout = new GridLayout(8, 8);
game.setLayout(gridLayout);
game.add(new JButton("Any Component"));
game.add(new JButton("Any other Component"));
contentPane.add(toolbar, BorderLayout.NORTH);
contentPane.add(game, BorderLayout.CENTER);