JButton没有正确删除

时间:2012-06-06 13:48:24

标签: java swing jbutton

我有一个JPanel,其中包含一个带有ActionListener的JButton。经过一定的点击后,需要删除JButton。但是,当我在上面调用remove()时,我会得到一个不会消失的按下按钮。

这是我的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class SetuPanel extends JPanel {
   private JTextField user = new JTextField();
   private JLabel label = new JLabel();
   private JButton submit = new JButton("Submit");
   private int phase = 0;
   public SetuPanel() {
      super(new FlowLayout());
      user.setPreferredSize(new Dimension(120,22));
      submit.addActionListener(new Submit());
      label.setText("Enter Desired Username:");
      add(label);
      add(user);
      add(submit);
   }
   private void remov(JComponent jc) {
      remove(jc);
      validate();
   }
   private class Submit implements ActionListener {
      public void actionPerformed(ActionEvent e) {
         System.out.println(user.getText());
         if (phase == 2) {
            phase++;
            label.setText("Playing!");
            remov(submit);
         } 
      }
   }
}

任何想法?

3 个答案:

答案 0 :(得分:5)

  • 如果您需要在屏幕上再次显示此submit.setVisible(false),请致电JButton(相反),

  • 您必须致电容器revalidate()repaint()

  • JPanel无法直接访问,因为您致电class extends JPanel,然后您必须致电

remove(jc);
revalidate();
repaint()

答案 1 :(得分:1)

除非您在未发布的代码中编辑它,否则phase仅在if块内增加。因此,phase永远不会变为2.您是否希望每次调用phase时都递增ActionListener

答案 2 :(得分:1)

仅在调整/重新定位/更改面板布局的情况下,屏幕上会自动调用repaint()方法(由重绘管理器)。如果添加组件,则它不会自行显示。您必须明确调用repaint() / revalidate()方法以确保组件出现在屏幕上。这没什么不对。

我建议你这样做:
删除:

JPanel.remove(component); // Remove component from your JPanel
JPanel.revalidate();
JPanel.repaint(); // Repaint a JPanel

添加:

JPanel.add(component); // Add component to JPanel
JPanel.revalidate();
JPanel.repaint(); // Repaint a JPanel

您必须使用this代替JPanel来处理您的工作。