【问题标题】:CardLayout method show() not working in awtCardLayout 方法 show() 在 awt 中不起作用
【发布时间】:2016-03-20 16:51:59
【问题描述】:

我正在尝试运行CardLayout,但不知道为什么CardLayout 中的show() 不起作用。我遇到了错误。

package java_files;

import java.awt.*;
import java.awt.event.*;

//import javax.swing.JButton;

public class AwtLayoutExample  {
   public static void main(String args[])
   {
      Frame f=new Frame("Card Layout");
      f.setSize(400,400);
      f.setVisible(true);
      f.addWindowListener(new WindowAdapter(){
          public void windowClosing(WindowEvent e){
              System.exit(0);
          }
      });
      CardLayout card=new CardLayout();
      f.setLayout(card);
      Panel panelCont=new Panel();
      Panel panelFirst=new Panel();
      Panel panelSecond=new Panel();
      Button b1=new Button("Switch to 2nd Panel");
      Button b2=new Button("Switch to 1st Panel");
      panelFirst.add(b1);

      panelSecond.add(b2);
      panelFirst.setBackground(Color.CYAN);
      panelSecond.setBackground(Color.GREEN);
      panelCont.add(panelFirst,"1");
      panelCont.add(panelSecond, "2");
      card.show(panelCont, "1");      
      b1.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
      card.show(panelCont, "2");
      }
      });
      b2.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
              card.show(panelCont, "2");
          }
      });
      f.add(panelCont);
      f.pack();
      f.setVisible(true);
   }
}   

当我运行它并出现此错误时,我只是得到一个空白帧。

Exception in thread "main" java.lang.IllegalArgumentException: wrong parent for CardLayout
    at java.awt.CardLayout.checkLayout(Unknown Source)
    at java.awt.CardLayout.show(Unknown Source)
    at java_files.AwtLayoutExample.main(AwtLayoutExample.java:33)

【问题讨论】:

  • 您将CardLayout 应用于Frame,但使用panelCont 作为您尝试切换的容器。看看How to Use CardLayout。此外,大约 16 多年前,AWT API 被 Swing 取代,您将获得对 Swing 和 JavaFX 的更好支持,然后您将获得对 AWT 的支持

标签: java layout awt


【解决方案1】:

您可以将 CardLayout 应用到 Panel 中,然后将其他 Panels 添加到此 Panel 中

Panel panelCont=new Panel(new CardLayout());
panelCont.add("one", panelOne);
panelCont.add("two", panelTwo);
panelCont.add("three", panelThree);

演出时你可以这样做:

((CardLayout) panelCont.getLayout()).show(panelCont, "two");

【讨论】:

  • 感谢它的工作。但我认为这是因为它有点复杂。使用秋千更简单。
  • CardLayout 两者都是一样的,但是我建议你用 Swing,这样更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 2011-11-08
相关资源
最近更新 更多