小程序和数组(使按钮可见)

时间:2014-05-02 19:13:52

标签: java button applet layout-manager grid-layout

在这个项目上工作,首先,我需要实现一个600x600像素的JApplet,它是一个10x10网格(水平和垂直间隙为4像素)的100个JButton。该程序从隐藏所有按钮开始,除了一个按钮,并且每按一次按钮都会打开某些按钮。每次单击也会导致背景颜色发生变化,并且按钮的标签也会发生变化。当所有按钮都被揭开时,背景颜色会变为黑色并保持黑色,直到用户关闭小程序。

按钮将保存在JButton类型的10x10数组中。按钮有一个包含行号和列号的2位数字标签,即第0行第0列左上角的按钮标记为00。

选择您想要用作背景的5种颜色(黑色除外)。

启动小程序时,背景为中性色,只有00按钮可见。

我无法在10x10网格中显示00-99的100个按钮。我觉得我的for循环可能不正确,这就是为什么按钮没有正确创建的原因。:

public class Project5 extends JApplet implements ActionListener {

    JButton button;
    Container contentPane;

    public void init() {

        setSize(600, 600);
        contentPane = getContentPane();
        contentPane.setBackground(Color.WHITE);

        GridLayout grid = new GridLayout(10,10);
        grid.setVgap(4);

        JButton[][] btns = new JButton[10][10];

        for (int i = 0; i < 10; i++) {

            for (int j = 0; j < 10; j++) {

                button = new JButton();
                button.addActionListener(this);
                contentPane.add(button);
                button.setVisible(true);

            }
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Container contentPane = getContentPane();
        button.setVisible(false);

        int clicks = 0;
        clicks++;

        if (clicks % 5 == 0) {
            contentPane.setBackground(Color.PINK);
        } else if (clicks % 5 == 1) {
            contentPane.setBackground(Color.GREEN);
        } else if (clicks % 5 == 2) {
            contentPane.setBackground(Color.BLUE);
        } else if (clicks % 5 == 3) {
            contentPane.setBackground(Color.YELLOW);
        } else if (clicks % 5 == 4) {
            contentPane.setBackground(Color.RED);
        }

    }

    public void checkDone() {
        //if all buttons visible, change contentPane color to black.

    }

}

1 个答案:

答案 0 :(得分:0)

您创建了一个布局管理器GridLayout,但从不使用它来设置组件的任何布局。您应该这样做,致电setLayout(...)并传递您的经理。否则,您的contentPane将使用默认的BorderLayout,并且当使用容器以默认方式将组件添加到BorderLayout时,它将以相同的方式覆盖添加的任何其他组件。最终只显示最后添加的组件。


修改:其他问题

这里:

Container contentPane = getContentPane();
button.setVisible(false);

您正在使用按钮变量并将其设置为不可见,但您的意思是什么按钮?一个人按下了吗?这肯定不是。如果那是你想要的那个,那么你应该在你的ActionEvent参数上调用getSource(),例如。

然后下一行:

int clicks = 0;
clicks++;

这样可以保证点击次数总是等于1而不是1次。不太有用。


此外,您创建了一个JButton,btns数组,但不执行任何操作。