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的时候再重新添加组件。 展开
JPanel2点击按钮1跳到JPanel1。
JPanel1是GridLayout布局的,对一个按钮2进行了监听,点击按钮2就会跳回JPanel2,并且用removeAll()清空了JPanel1,revalidate(),repaint()。
但是再从JPanel2点击按钮1跳到JPanel1,JPanel1里的组件就会重复出现,行列也会自动调整。
求解,想点击按钮2后JPanel1的组件就清空,然后在从JPanel2点击跳转到JPanel1的时候再重新添加组件。 展开
2个回答
2018-04-06 · 知道合伙人互联网行家
关注
展开全部
你可以调用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();
}
}
}
需要特别注意的是移除和添加组件之后,记得重画组件。
一般想要移除和添加一个组件,可能是希望程序在运行时动态的移除和添加,所以你可以为要移除的组件设置一个监听器。
例如单击某一个组件就移除这个组件,并且添加另外的组件。例如,当单击按钮时,把按钮移除,添加一个文本框。下面是一个具体的例子:
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却没用。
展开全部
可以的,你的Jpanel一定有个引用对不对,假设这个引用是这样 Jpanel yourpanel = new Jpanel(); 你的容器肯定添加了这个Jpanel,可能会是XXXX.add(yourpanel); 那么,该容器有个方法remove(Component cmp); 你在适当的时候调用这个方法,传入你的组件,就可以删除 XXXX.remove(yourpanel);
追问
请问一下,这个“适当的时候”是什么时候?我在点击按钮切换另一个JPanel的时候removeAll可以么?现在不行,切换回去的时候原来的控件不消失,新的控件又会生成
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询