JPanel怎么移除所有控件? 50

用removeAll(),但是没有用。JPanel2点击按钮1跳到JPanel1。JPanel1是GridLayout布局的,对一个按钮2进行了监听,点击按钮2就会跳回J... 用removeAll(),但是没有用。
JPanel2点击按钮1跳到JPanel1。
JPanel1是GridLayout布局的,对一个按钮2进行了监听,点击按钮2就会跳回JPanel2,并且用removeAll()清空了JPanel1,revalidate(),repaint()。
但是再从JPanel2点击按钮1跳到JPanel1,JPanel1里的组件就会重复出现,行列也会自动调整。
求解,想点击按钮2后JPanel1的组件就清空,然后在从JPanel2点击跳转到JPanel1的时候再重新添加组件。
展开
 我来答
DoramiHe
2018-04-06 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25334 获赞数:59537
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
你可以调用JPanel的remove方法,然后用add添加组件,最后更新重画就可以了。
一般想要移除和添加一个组件,可能是希望程序在运行时动态的移除和添加,所以你可以为要移除的组件设置一个监听器。
例如单击某一个组件就移除这个组件,并且添加另外的组件。例如,当单击按钮时,把按钮移除,添加一个文本框。下面是一个具体的例子:
package konw.win;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class WinTest3
{
public static void main(String[] args)
{

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setLayout(new FlowLayout());
JPanel panel = new JPanel();
JButton button = new JButton("change");
panel.add(button);
JTextField f = new JTextField(20);
ActionListener listener = new ChangeListener(button,panel,f);
button.addActionListener(listener);//注册监听器
frame.add(panel);
frame.setVisible(true);

}
}
/*监听器,当单击按钮时,移除button按钮,加入text文本框*/
class ChangeListener implements ActionListener
{
JButton button;
JPanel panel;
JTextField text;
public ChangeListener(JButton button, JPanel panel, JTextField text)
{
super();
this.button = button;
this.panel = panel;
this.text = text;
}

@Override
public void actionPerformed(ActionEvent e)
{
if("change".equals(e.getActionCommand()))
{
panel.remove(button);
panel.add(text);
panel.updateUI();
panel.repaint();
}
}

}
需要特别注意的是移除和添加组件之后,记得重画组件。
追问
但是我的控件太多了,一个个remove很麻烦。现在用removeAll却没用。
藤原子大雄
2018-04-07 · TA获得超过7195个赞
知道大有可为答主
回答量:6977
采纳率:82%
帮助的人:1737万
展开全部
可以的,你的Jpanel一定有个引用对不对,假设这个引用是这样 Jpanel yourpanel = new Jpanel(); 你的容器肯定添加了这个Jpanel,可能会是XXXX.add(yourpanel); 那么,该容器有个方法remove(Component cmp); 你在适当的时候调用这个方法,传入你的组件,就可以删除 XXXX.remove(yourpanel);
追问
请问一下,这个“适当的时候”是什么时候?我在点击按钮切换另一个JPanel的时候removeAll可以么?现在不行,切换回去的时候原来的控件不消失,新的控件又会生成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式