首页 > 解决方案 > 删除不更新 JPanel/JFrame 的组件

问题描述

我有一个更大的程序,在那里我遇到了一个奇怪的错误,我设法将它隔离到这个小代码行中,但是从这里我不能说我做错了什么。

问题是由于某种原因,JFrame/JPanel 在添加和删除面板时忘记更新它的图形。如果我没有为“pbase”面板设置首选大小,或者如果我在移除窗口时调整窗口大小,它会自行修复。

我错过了什么?

public class ADdREMOVEJPANELS extends JFrame implements KeyListener{
public static void main(String[] args) {
    new ADdREMOVEJPANELS();
}
JPanel p = new JPanel();
JPanel pbase = new JPanel();
public ADdREMOVEJPANELS(){
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.addKeyListener(this);

    p.setBackground(Color.red);
    p.setPreferredSize(new Dimension(200,200));

    pbase.setBackground(Color.blue);
    pbase.setLayout(new BorderLayout());
    pbase.setPreferredSize(new Dimension(200,200));
    pbase.add(p);

    this.setBackground(Color.green);
    this.add(pbase);


    this.pack();
    this.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {

    if(e.getKeyCode() == KeyEvent.VK_UP){
        System.out.println("works");
        pbase.remove(p);
        pbase.setLayout(new BorderLayout());
        this.pack();

    }else if(e.getKeyCode() == KeyEvent.VK_DOWN){
        System.out.println("worksdouble");
        pbase.add(p);
        this.pack();
    }
}
}

标签: javaswing

解决方案


推荐阅读