Java - 添加标签/删除按钮

时间:2013-11-24 16:17:01

标签: java button awt actionlistener labels

我的程序应该在单击按钮时删除它并用标签替换它。在我的程序中,单击时按钮被删除,但标签没有添加,直到单击另一个按钮,这将删除帽子按钮,但然后该标签不显示....等等。这是代码:

//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();
    }
}

谢谢 -

3 个答案:

答案 0 :(得分:1)

尝试在调用offButtons()之后调用之后的repaint()。在您的代码中,重新绘制组件后添加标签。

 public void refreshButtons() {
      addButtons();
      revalidate();
      repaint();
  }

答案 1 :(得分:1)

添加按钮后,您应该致电revalidaterepaint。改变你的方法位置。

//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对象的第一个组件是首次显示容器时的可见组件。