Java 为什么可以';我不能用这种方法从JFrame中删除JPanel吗?

Java 为什么可以';我不能用这种方法从JFrame中删除JPanel吗?,java,swing,Java,Swing,我正在使用一个名为CardPanel的JPanel子类来显示我的图像。在hitYourself()方法中,我试图删除名为currentPanel的CardPanel,将CardPanel的新实例分配给currentPanel字段,然后将新的CardPanel对象添加到JFrame。由于某些原因,我无法从hitYourself()方法中删除面板或添加新的CardPanel。当我将hitYourself的代码放入play方法中时,它会按预期工作。我不确定它是否相关,但hitYourself方法是通过

我正在使用一个名为CardPanel的JPanel子类来显示我的图像。在hitYourself()方法中,我试图删除名为currentPanel的CardPanel,将CardPanel的新实例分配给currentPanel字段,然后将新的CardPanel对象添加到JFrame。由于某些原因,我无法从hitYourself()方法中删除面板或添加新的CardPanel。当我将hitYourself的代码放入play方法中时,它会按预期工作。我不确定它是否相关,但hitYourself方法是通过我添加到JButton的ActionListener调用的。我已经验证了ActionListener正在工作,并且确实调用了该方法。为什么我不能在hitYourself()中从JFrame中删除JPanel


您是否尝试重新绘制屏幕?

并调用
revalidate()
。我无法重新绘制CardPanel,因为它需要我通过构造函数提供的更新的ArrayList,这就是为什么我尝试删除它并创建一个新的。我不熟悉revalidate,但我将查找并尝试它。我对这个很陌生,只上过一门编程课college@RafaelRondon:省去了很多麻烦--使用CardLayout交换组件,或使用装有图像图标的JLabel交换图像。@gparyani,如果您不太了解,它可能会起作用。有时候你需要用锤子来让它沉进去。为什么不直接使用CardLayout管理器呢?
    public void play(){
    yourCards.add(deckValues[getAvailableCardIndex()]);
    yourCards.add(deckValues[getAvailableCardIndex()]);
    dealerCards.add(deckValues[getAvailableCardIndex()]);
    dealerCards.add(deckValues[getAvailableCardIndex()]);
    currentPanel = new CardPanel(yourCards,dealerCards);
    frame.add(currentPanel);


    }

    public void hitYourself(){

    yourCards.add(deckValues[getAvailableCardIndex()]);
    frame.remove(currentPanel);
    currentPanel = new CardPanel(yourCards,dealerCards);
    frame.add(currentPanel);

    }