将Button数组添加到JPanel

时间:2018-02-21 13:55:30

标签: java swing awt

我的项目有另一个问题。我创建了这个由JButtons制作的GameBoard(它现在可以正常运行),但是我需要将它添加到JPanel中。我需要在窗口中显示其他内容(在其他面板中)。但是当我尝试将Button Array添加到面板并将该面板添加到窗口时,疯狂的事情开始发生(按钮非常小,网格完全被破坏等)。我怎么能将这个Button Array添加到JPanel并将其放在窗口的中心? 这是我的代码:

package city;

import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GameBoard extends JFrame implements ActionListener {

// The overall box count in chess board
public static final int squareCount = 64;
// The Array of buttons (the GameBoard itself)
public Button[][] button = new Button[8][8];
// Colors for all the buttons
public Color defaultColor = Color.WHITE;
public Color darkRedColor = Color.RED;
public Color darkBlueColor = Color.BLUE;
public Color lightBlueColor = Color.CYAN;
public Color lightRedColor = Color.PINK;

public GameBoard(String title) {
    // Creates the buttons in the array
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            button[i][j] = new Button();
            add(button[i][j]);
            button[i][j].setBackground(defaultColor);
        }
    }

    // Build the window
    this.setTitle(title); // Setting the title of board
    this.setLayout(new GridLayout(8, 18)); // GridLayout will arrange elements in Grid Manager 8 X 8
    this.setSize(650, 650); // Size of the chess board
    this.setVisible(true); // Sets the board visible
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // If you close the window, the program will terminate
    this.setResizable(false); //The window is not resizable anymore ;)

    // Sets some text on the buttons
    button[0][3].setText("Red's");
    button[0][4].setText("Gate");
    button[7][3].setText("Blue's");
    button[7][4].setText("Gate");

    // Colors the buttons
    newGame();

}

// Colors the buttons
public void newGame() {
    button[0][0].setBackground(lightRedColor);
    button[0][1].setBackground(lightRedColor);
    button[0][2].setBackground(lightRedColor);
    button[0][3].setBackground(darkRedColor);
    button[0][4].setBackground(lightRedColor);
    button[0][5].setBackground(lightRedColor);
    button[0][6].setBackground(lightRedColor);
    button[0][7].setBackground(lightRedColor);
    button[1][3].setBackground(darkRedColor);

    button[7][0].setBackground(lightBlueColor);
    button[7][1].setBackground(lightBlueColor);
    button[7][2].setBackground(lightBlueColor);
    button[7][3].setBackground(lightBlueColor);
    button[7][4].setBackground(darkBlueColor);
    button[7][5].setBackground(lightBlueColor);
    button[7][6].setBackground(lightBlueColor);
    button[7][7].setBackground(lightBlueColor);
    button[6][4].setBackground(darkBlueColor);
}

// The ActionListener is not yet used
public void actionPerformed(ActionEvent ae) {
    String action = ae.getActionCommand();

}

public static void main(String[] args) {

    String title = "City - A Two-Player Strategic Game";

    GameBoard gameBoard = new GameBoard(title); // Creating the instance of gameBoard
}
}

以下是生成的错误GUI的屏幕截图: Bad GUI

感谢您的帮助,祝所有人遇到类似问题!

1 个答案:

答案 0 :(得分:0)

这是你在找什么?我不太清楚这个问题是什么。

这会将按钮添加到新的JPanel并将此面板添加到框架中。

JPanel panel = new JPanel(new GridLayout(8, 8));
    panel.setSize(650,650);
    getContentPane().add(panel, BorderLayout.CENTER);
    // Creates the buttons in the array
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            button[i][j] = new JButton();
            panel.add(button[i][j]);
            button[i][j].setBackground(defaultColor);
        }
    }

    // Build the window
    this.setTitle(title); // Setting the title of board
    getContentPane().setLayout(new BorderLayout());
    this.setSize(650, 650); // Size of the chess board
    this.setVisible(true); // Sets the board visible
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // If you close the window, the program will terminate
    this.setResizable(false); //The window is not resizable anymore ;)