如何解决在JFrame中用JPanel替换JPanel
| 我有一个扩展JFrame的类,并且它具有BorderLayout。它具有两个类型为JPanel的私有实例变量。它们代表按钮的面板,分别称为flipButton和confidenceButtons。当您单击按钮时,按钮面板被另一个按钮面板代替。也就是说,如果单击flipButton中的按钮,则flipButton将替换为confidenceButtons。我试图这样做: 私有类FlipListener实现ActionListener { 公共无效actionPerformed(ActionEvent e){ remove(flipButton); 添加(confidenceButtons,BorderLayout.soUTH); validate(); ... } } 私有类ColorListener实现ActionListener { ... 公共无效actionPerformed(ActionEvent e){ ... remove(confidenceButtons); add(flipButton,BorderLayout.soUTH); validate(); } } flipButton中的按钮具有FlipListeners,confidenceButtons中的按钮具有ColorListeners。程序运行时,单击按钮将删除面板,但是没有添加任何内容来替换它。我究竟做错了什么? 编辑 事实证明cardlayout是一种简单易用的解决方案。事实证明,以上代码确实有效;问题出在我代码的另一部分。 >。<但是,我一直很难使用这些方法,我发现cardlayout为我简化了它。谢谢。解决方法
使用CardLayout,如下所示。
, revalidate()+ repaint()应该是技巧,此处为示例
编辑:
觉得自己有问题,这里和这里的例子,再加上一个垃圾箱的例子,随时可以再次基于代码构建问题
另一种方法是查看安德鲁·汤普森(Andrew Thompson)添加的出色示例:-) +1
, 尝试使用getContentPane()调用remove(),add()方法等:
getContentPane().remove(flipButton);
getContentPane().add(confidenceButtons,BorderLayout.SOUTH);
getContentPane().revalidate();
getContentPane().repaint();
编辑:
下面的代码对我有用:
import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Frame extends JFrame {
JPanel flipButton =new JPanel();
JPanel confidenceButtons =new JPanel();
public Frame() throws HeadlessException {
super();
this.setLayout(new BorderLayout());
JButton b1=new JButton(\"flip\");
b1.addActionListener(new FlipListener());
flipButton.add(b1);
JButton b2=new JButton(\"color\");
b2.addActionListener(new ColorListener());
confidenceButtons.add(b2);
this.getContentPane().add(flipButton,BorderLayout.SOUTH);
this.setSize(250,250);
this.pack();
this.setVisible(true);
}
private class FlipListener implements ActionListener{
public void actionPerformed(ActionEvent e){
remove(flipButton);
add(confidenceButtons,BorderLayout.SOUTH);
validate();
repaint();
}
}
private class ColorListener implements ActionListener{
public void actionPerformed(ActionEvent e){
remove(confidenceButtons);
add(flipButton,BorderLayout.SOUTH);
validate();
repaint();
}
}
/**
* @param args
*/
public static void main(String[] args) {
new Frame();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。