我正在尝试使用以下代码在swing窗口JFrame Container上添加和删除面板。如果在构造函数中添加JPanel但它没有添加运行时,则会添加JPanel。
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
class test extends JFrame implements ActionListener {
test() {
Container cp = this.getContentPane();
JButton b1 = new JButton("add");
JButton b2 = new JButton("remove");
cp.add(b1);
cp.add(b2);
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("add")) {
panel1 frm = new panel1();
cp.add(frm);
}
if (ae.getActionCommand().equals("remove")) {
remove(frm);
}
}
public static void main(String args[]) {
test t1 = new test();
t1.show(true);
}
}
class panel1 extends JPanel {
panel1() {
JButton b1 = new JButton("ok");
add(b1);
}
}
答案 0 :(得分:6)
对于您的概念(删除或JPanel
添加到JFrame
后)必须致电validate()
& repaint()
至JFrame
更好的方法是使用CardLayout
答案 1 :(得分:1)
我正在处理类似的问题,我想在运行时更改面板中包含的面板
经过一些测试,重新测试和很多失败的我的伪算法是这样的:
parentPanel:包含我们要删除的面板
childPanel:我们要切换的面板
parentPanelLayout:parentPanel的布局
editParentLayout():每次使用不同的childPanel和NEW parentPanelLayout构建parentPanel
parentPanel.remove(childPanel);
editParentLayout();
parentPanel.revalidate();
parentPanel.repaint();