在JFrame中用JPanel替换JPanel

She*_*ley 8 java swing add jpanel

我有一个扩展JFrame的类,它有一个BorderLayout.它有两个类型为JPanel的私有实例变量.它们代表按钮面板,称为flipButton和confidenceButtons.单击按钮时,按钮面板将被另一个按钮面板替换.也就是说,如果单击flipButton中的按钮,则flipButton将替换为confidenceButton.我试着这样做:

  private class FlipListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
      remove(flipButton); 
      add(confidenceButtons,BorderLayout.SOUTH);
      validate();
      ...
    }
  } 
  private class ColorListener implements ActionListener{
    ...
    public void actionPerformed(ActionEvent e){
      ...
      remove(confidenceButtons); 
      add(flipButton,BorderLayout.SOUTH);
      validate();
    }
  }

flipButton中的按钮具有FlipListeners,而ConfidentButton中的按钮具有ColorListeners.程序运行时,单击按钮将删除面板,但不会添加任何内容来替换它.我究竟做错了什么?

编辑

CardLayout原来是一个简单易行的解决方案.事实证明,上面的代码确实有效; 问题是我的代码的另一部分中的拼写错误.>.但是,我总是在使用这些方法时遇到了麻烦,我发现CardLayout简化了它.谢谢.

And*_*son 8

使用CardLayout,如图所示这里.

游戏视图 高分视图


mKo*_*bel 5

revalidate()+ repaint()应该是技巧,例如这里

编辑:

觉得你有问题,对于该例子在这里这里,再例如通过trashgod,可随时根据代码重新建造你的问题

另一种方式是看安德鲁汤普森添加的优秀例子:-) +1