Java 按钮未正确卸下
我有一个JPanel,它包含一个带有ActionListener的JButton。单击一定次数后,需要删除JButton。然而,当我对它调用remove()时,我会得到一个不会消失的按钮 这是我的密码: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
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