在JAVA中将工具栏添加到GUI

时间:2016-04-19 15:07:48

标签: java user-interface jframe containers

我正在制作国际象棋游戏。我有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);
   }
}

2 个答案:

答案 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);