Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮未正确卸下_Java_Swing_Jbutton - Fatal编程技术网

Java 按钮未正确卸下

Java 按钮未正确卸下,java,swing,jbutton,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 JTe

我有一个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);
         } 
      }
   }
}
有什么想法吗?

  • 调用
    submit.setVisible(false)
    (更确切地说)如果您需要此
    JButton
    在屏幕上再次可见

  • 您必须调用container
    revalidate()
    repaint()

  • JPanel
    无法直接访问,因为您调用
    class extensed JPanel
    ,然后必须调用


除非您在未发布的代码中编辑它,
阶段
仅在if块内递增。因此,
阶段将永远不会变为2。是否要在每次调用
ActionListener
时递增
阶段

只有在调整面板大小/重新定位/更改面板布局的情况下,才会在屏幕上自动调用
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

你必须用
这个
而不是
JPanel
来处理你的案子。

我试过了。我还是有同样的问题。即使使用submit.setVisible(false),也可能是因为ActionListener必须提交吗?当您调用this.relidate和this.repain时发生了什么?guy是对的,当您从JPanel中删除组件时,您需要调用.validate()方法。之后也可以调用repaint()。我仍然遇到同样的问题。我找不到任何明显的理由来解释为什么按钮不会消失。另一方面,如果我尝试调试面板,然后单击按钮,则会出现相同的错误。它正在递增,我剪切了该代码,因为我觉得它不相关1)使用
卡片布局
。2) 为了更快地获得更好的帮助,请发布一个。
JPanel.add(component); // Add component to JPanel
JPanel.revalidate();
JPanel.repaint(); // Repaint a JPanel