我的程序应该在单击按钮时删除它并用标签替换它。在我的程序中,单击时按钮被删除,但标签没有添加,直到单击另一个按钮,这将删除帽子按钮,但然后该标签不显示....等等。这是代码:
//adds buttons to screen if corresponding
//boolForButtons is true, else it
//displays label
public void addButtons() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (boolForButtons[i][j]) {
add(buttons[i][j]);
} else {
remove(buttons[i][j]);
add(labels[i][j]);
}
}
}
}
//refreshs the screen
public void refreshButtons() {
revalidate();
repaint();
addButtons();
}
//if button is clicked
public class event implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
//set the button clicked to not show on the screen
if (e.getSource() == buttons[i][j]) {
boolForButtons[i][j] = false;
}
}
}
refreshButtons();
}
}
谢谢 -
答案 0 :(得分:1)
尝试在调用offButtons()之后调用之后的repaint()。在您的代码中,重新绘制组件后添加标签。
public void refreshButtons() {
addButtons();
revalidate();
repaint();
}
答案 1 :(得分:1)
添加按钮后,您应该致电revalidate
和repaint
。改变你的方法位置。
//refreshs the screen
public void refreshButtons() {
addButtons(); // Add button here.
revalidate();
repaint();
}
答案 2 :(得分:1)
如果我试图完成类似的事情,我会调查CardLayout:
http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html
来自:http://docs.oracle.com/javase/7/docs/api/java/awt/CardLayout.html
CardLayout对象是容器的布局管理器。它将容器中的每个组件视为卡片。一次只能看到一张卡片,而容器则充当一叠卡片。添加到CardLayout对象的第一个组件是首次显示容器时的可见组件。