在这个项目上工作,首先,我需要实现一个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.
}
}
答案 0 :(得分:0)
您创建了一个布局管理器GridLayout,但从不使用它来设置组件的任何布局。您应该这样做,致电setLayout(...)
并传递您的经理。否则,您的contentPane将使用默认的BorderLayout,并且当使用容器以默认方式将组件添加到BorderLayout时,它将以相同的方式覆盖添加的任何其他组件。最终只显示最后添加的组件。
修改:其他问题
这里:
Container contentPane = getContentPane();
button.setVisible(false);
您正在使用按钮变量并将其设置为不可见,但您的意思是什么按钮?一个人按下了吗?这肯定不是。如果那是你想要的那个,那么你应该在你的ActionEvent参数上调用getSource()
,例如。
然后下一行:
int clicks = 0;
clicks++;
这样可以保证点击次数总是等于1而不是1次。不太有用。
此外,您创建了一个JButton,btns数组,但不执行任何操作。