用循环创建的按钮 - Swing

时间:2017-05-23 18:24:23

标签: java swing loops graphics jbutton

我目前正在编写游戏板(使用Java Swing)。我写了以下内容来显示电路板(行从A-I开始,列从1-12开始):

JPanel panel = new JPanel(new GridLayout(9,12,5,5));
panel.setBounds(10, 11, 800, 600);
frame.getContentPane().add(panel);

//board
for(int r = 0; r<9; r++)
{
    for(int c = 0; c<12; c++)
    {
        panel.add(new JButton((c+1) + numberList[r])).setBackground(Color.WHITE);
    }
}

用户应该可以购买电路板上的某些插槽。例如,如果用户A购买A1,则该板上的该按钮应该变为红色,如果用户B购买A2,则该按钮应该变为绿色(用户将具有某些具有可用的瓷砖坐标的按钮,并且在单击按钮,板上的瓷砖应该改变颜色并保持不变)。由于我在循环中创建了所有按钮而我没有为每个按钮命名,我还能完成这个吗?我不想一个接一个地创建108个按钮。

我知道我不应该在电路板上使用按钮,我很快就会改变它。我将使用Graphics G来使用矩形。但是,我想先弄清楚我的计划。

1 个答案:

答案 0 :(得分:0)

不需要逐个创建它们,只需保留对数组中每个按钮的引用,以便以后可以访问它:

public static void main(String[] args)
{
    JFrame frame = new JFrame();

    JPanel panel = new JPanel(new GridLayout(9, 12, 5, 5));
    panel.setBounds(10, 11, 800, 600);
    frame.getContentPane().add(panel);

    JButton[][] buttons = new JButton[9][12];
    char [] numberList = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'};

    // board
    for (int r = 0; r < 9; r++)
    {
        for (int c = 0; c < 12; c++)
        {
            buttons[r][c] = new JButton("" + (c + 1) + numberList[r]);
            buttons[r][c].setBackground(Color.WHITE);
            panel.add(buttons[r][c]);
        }

    }

    frame.setContentPane(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

下次请添加完整代码示例!