【问题标题】:Card Layout showing wrong panel卡片布局显示错误的面板
【发布时间】:2016-06-12 12:47:15
【问题描述】:

通过卡片布局所在的方法添加一个面板。另一个通过对象传递给方法。问题是卡片布局的面板显示面板“1”而不是面板“2”,就像面板“2”甚至没有传递给方法。没有错误....

我尽量简化代码:

头等舱:

     public class Game  extends JFrame {
          private CardLayout cl;
          private JPanel MAIN;
          private JPanel FIRST;

          public Game(){

          FIRST = new JPanel();
          FIRST.setLayout(new BorderLayout());

          cl = new CardLayout();
          MAIN = new JPanel();

          MAIN.setLayout(cl);   

      }
          public void Show(){

            MAIN.add(FIRST, "1");
            cl.show(MAIN, "2");
            add(MAIN);  
      }


          public void addPanel2(JPanel panel){
            MAIN.add(panel, "2");   
      }
}

二等:

public class meni {
   private JPanel SECOND;
   Game nova = new Game();

   public meni(){

      SECOND = new JPanel();
      SECOND.setLayout(new GridBagLayout());

      nova.addPanel2(SECOND);
   }
}

主类:

  public static void main(String[] args){

      Game ticFrame = new Game();
      meni luk = new meni();

      ticFrame.show();

      ticFrame.setTitle("Hey");
      ticFrame.setSize(600,600);
      ticFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      ticFrame.setLocationRelativeTo(null);
      ticFrame.setVisible(true);
   }
 }

【问题讨论】:

    标签: java class object methods cardlayout


    【解决方案1】:

    您添加第二个 JPanel 很好,但您将它添加到 错误 Game 对象。 Game 对象当前在程序启动时可见,在第二个类中,您创建一个全新且唯一的 Game 对象并将您的第二个 JPanel 添加到其中,因此它不会显示在可视化对象中是有道理的。

    解决方案:不要在第二个类中创建新的 Game 对象,而是确保第二个类具有对 visualized Game 对象的有效引用。这可以通过构造函数参数或 setter 方法参数来完成。

    【讨论】:

    • 我明白了。非常感谢!
    【解决方案2】:

    nova.addPanel2(SECOND);你从这段代码中是什么意思?要将面板添加到框架,我们有诸如 JPanel.add(您的面板对象)之类的方法。

    【讨论】:

    • 我将面板 SECOND 传递给方法 addPanel2(在第一类中),该方法将面板 SECOND 添加到面板 MAIN
    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2021-11-20
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多