Java 将JButton的多个实例添加到网格中的JFrame

Java 将JButton的多个实例添加到网格中的JFrame,java,arrays,swing,jbutton,Java,Arrays,Swing,Jbutton,下面的代码应该是为一个特定类型(比如我想在网格中表示的colorjbutton)创建和对象实例。当我遍历for循环将按钮添加到jframe时,它不会添加任何内容。但是如果我添加一个实例变量,它就会添加这个变量。有人有主意吗 public class Grid { protected JButton [][] board; private JButton player; private JButton openCell; private JButton wall; private JButto

下面的代码应该是为一个特定类型(比如我想在网格中表示的colorjbutton)创建和对象实例。当我遍历for循环将按钮添加到jframe时,它不会添加任何内容。但是如果我添加一个实例变量,它就会添加这个变量。有人有主意吗

public class Grid {

protected JButton [][] board;

private JButton player;
private JButton openCell;
private JButton wall;
private JButton closedCell;

public Grid(String [] args) { // args unused
    // Instantiation 
    board = new JButton [6][6];
    layout = new String [6][6];

    blueCell = new JButton("BLUE CELL");
    redCell = new JButton("RED CELL");
    greenCell = new JButton("GREEN CELL");
    whiteCell = new JButton("WHITE CELL");

    // Configuration (add actions later)

    // Decoration
    blueCell.setBackground(Color.blue);
    redCell.setBackground(Color.red);
    greenCell.setBackground(Color.green);
    whiteCell.setBackground(Color.white);

    for (int rows = 0; rows < 6; rows++) {
        for (int cols = 0; cols < 6; cols++) {
            if ((layout[rows][cols]).equals('*')) {
                board[rows][cols] = blueCell;
            }
            else if ((layout[rows][cols]).equals('.')) {
                board[rows][cols] = redCell;
            }
            else if ((layout[rows][cols]).equals('x')) {
                board[rows][cols] = greenCell;
            }
            else {
                board[rows][cols] = whiteCell;
            }
        }
    }

    JFrame game = new JFrame();
    game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    game.setLayout(new GridLayout (6, 6));
    game.setSize(500, 500);


    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board.length; j++) {
            if ((board[i][j]).equals(blueCell)) {
                grid.add(blueCell);
            }
            else if ((board[i][j]).equals(redCell)) {
                grid.add(redCell);
            }
            else if ((board[i][j]).equals(greenCell)) {
                grid.add(greenCell);
            }
                else {
                grid.add(whiteCell);
            }
        }
    }

    grid.setVisible(true);

} // end of constructor
} // end of Grid class

您只能向GUI添加一次组件。如果将其添加到另一个组件,它将从上一个组件中删除。您多次尝试添加相同的jbutton,但都不起作用。相反,您必须创建更多的jbutton。考虑让你的按钮共享允许的动作。< /P>

如果您需要更多帮助,请考虑发布可编译代码。当前代码不是一个小型可运行的可编译程序,它演示了您的问题,也就是说,

编辑 您的评论:


但是这些不是同一个JButton的JButton实例吗?我不明白你的回答是什么意思

从数学角度来考虑。。。您在上面的代码中创建了多少个JButton?这很容易计算,正好是4:

blueCell = new JButton("BLUE CELL");
redCell = new JButton("RED CELL");
greenCell = new JButton("GREEN CELL");
whiteCell = new JButton("WHITE CELL");
所以,现在问问你自己,用这四个JButton,你想在GUI中显示多少个JButton?如果是四个,那么只要你使用每个按钮,你就可以了,但是如果是更多,那么你就有麻烦了。从6x6网格,board=new JButton[6][6];,看起来您正试图显示36个JButton,如果这是真的,您就有问题了


但是,如果仍然被卡住,请考虑创建和发布.

。您可以只向GUI添加一个组件。如果将其添加到另一个组件,它将从上一个组件中删除。您多次尝试添加相同的jbutton,但都不起作用。相反,您必须创建更多的jbutton。考虑让你的按钮共享允许的动作。< /P>

如果您需要更多帮助,请考虑发布可编译代码。当前代码不是一个小型可运行的可编译程序,它演示了您的问题,也就是说,

编辑 您的评论:


但是这些不是同一个JButton的JButton实例吗?我不明白你的回答是什么意思

从数学角度来考虑。。。您在上面的代码中创建了多少个JButton?这很容易计算,正好是4:

blueCell = new JButton("BLUE CELL");
redCell = new JButton("RED CELL");
greenCell = new JButton("GREEN CELL");
whiteCell = new JButton("WHITE CELL");
所以,现在问问你自己,用这四个JButton,你想在GUI中显示多少个JButton?如果是四个,那么只要你使用每个按钮,你就可以了,但是如果是更多,那么你就有麻烦了。从6x6网格,board=new JButton[6][6];,看起来您正试图显示36个JButton,如果这是真的,您就有问题了


但是,如果仍然被卡住,请考虑创建和发布.< /P>,但是这些不是作为JButt实例而不是同一个JButton吗?我不明白你的回答是什么意思…谢谢你,我会试试。。。我会这样做的。解决问题?这可以解释很多情况,不是吗?@user2449907:我不知道你这是什么意思。。但底线是,对于每个要显示的按钮,您都需要一个唯一的JButton。但是这些不是同一个JButton的JButton实例吗?我不明白你的回答是什么意思…谢谢你,我会试试。。。我会这样做的。解决问题?这可以解释很多情况,不是吗?@user2449907:我不知道你这是什么意思。。但底线是,对于每个要显示的按钮,您都需要一个唯一的JButton。句号。请不要删除您的代码和问题,因为这会使原始问题的所有答案都过时,并意味着我在帮助您方面浪费了时间。请还原您以前的代码,如果您希望添加新代码作为对问题的编辑,因为我已编辑了我的答案。我已回滚您的问题。如果您想编辑此内容并在底部添加信息,请执行此操作。或者如果你的新想法完全不同,那么考虑在这个网站上问一个全新的问题。请不要删除你的代码和问题,因为它使所有问题的答案都过时了,这意味着我浪费了我的时间试图帮助你。请还原您以前的代码,如果您希望添加新代码作为对问题的编辑,因为我已编辑了我的答案。我已回滚您的问题。如果您想编辑此内容并在底部添加信息,请执行此操作。或者如果你的新想法完全不同,那么考虑在这个网站上提出一个全新的问题。