package awt;
//CardLayout没办法分页显示,请大侠帮着指出错误来。
import java.awt.*;
import java.awt.event.*; //事件处理机制,下一节的内容
public class ThreePages implements MouseListener {
        CardLayout layout=new CardLayout(); //实例化一个牌布局管理器对象
        Frame f=new Frame("CardLayout");
        Button page1Button;
        Label page2Label; //Label是标签,实际上是一行字符串
        TextArea page3Text; //多行多列的文本区域
        Button page3Top;
        Button page3Bottom;public static void main(String args[]) 
{ new ThreePages().go(); }public void go()
{
        f.setLayout(layout); //设置为牌布局管理器layout
        f.add(page1Button=new Button("Button page"),"page1Button"); /*第二个参数"page1Button"表示的是你对这层牌所取的名字*/
        page1Button.addMouseListener(this); //注册监听器
        f.add(page2Label=new Label("Label page"),"page2Label");
        page2Label.addMouseListener(this); //注册监听器
        Panel panel=new Panel();
        panel.setLayout(new BorderLayout());
        panel.add(page3Text=new TextArea("Composite page"),"Center");
        page3Text.addMouseListener(this); 
        panel.add(page3Top=new Button("Top button") , "North");
        page3Top.addMouseListener(this);
        panel.add(page3Bottom=new Button("Bottom button") ,"South");
        page3Bottom.addMouseListener(this);
        f.add(panel,"panel");
        f.setSize(200,200);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
}@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub

}@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}}

解决方案 »

  1.   

    你的各个Card都叠放起来了,只能看到最上面的那个(最先添加的)。你需要再添加一组按钮来控制Card的切换,才能调出其他的Card。
    建议用javax.swing.JTabbedPane,比这个好用多了。
      

  2.   

    一组按钮来控制Card的切换 不会做,这个是书上的例子,我以为能实现切换。
      

  3.   

    如果实在不行的话,可以用setBounds(x,x,x,x)方法来具体制定某个component的位置。
    虽然有点麻烦。但管用。
      

  4.   

    带控制按钮的给你写了一下,注意读注释:
    import java.awt.*;
    import java.awt.event.*;public class ThreePages {
    CardLayout layout = new CardLayout();
    Frame f = new Frame("CardLayout");

    Panel mainPane = new Panel(); // 将三页内容放到这个主面板中 Button page1Button;
    Label page2Label;
    TextArea page3Text;
    Button page3Top;
    Button page3Bottom; public static void main(String args[]) {
    new ThreePages().go();
    } public void go() {
    mainPane.setLayout(layout); //设置主面板为CardLayout布局
    mainPane.add(page1Button = new Button("Button page"), "page1Button");
    mainPane.add(page2Label = new Label("Label page"), "page2Label");
    Panel panel = new Panel();
    panel.setLayout(new BorderLayout());
    panel.add(page3Text = new TextArea("Composite page"), "Center");
    panel.add(page3Top = new Button("Top button"), "North");
    panel.add(page3Bottom = new Button("Bottom button"), "South");
    mainPane.add(panel, "panel");

    Panel controller = new Panel(); // 添加一个控制面板和两个控制按钮
    Button prev = new Button("previous");
    Button next = new Button("next");
    prev.addActionListener(new ActionListener() { // 为控制按钮添加事件监听
    public void actionPerformed(ActionEvent e) {
    layout.previous(mainPane);  // 显示上一页
    }
    }
    );
    next.addActionListener(new ActionListener() { // 为控制按钮添加事件监听
    public void actionPerformed(ActionEvent e) {
    layout.next(mainPane);  // 显示下一页
    }
    }
    );
    controller.add(prev);
    controller.add(next);

    f.setLayout(new BorderLayout());
    f.add(controller, "North");
    f.add(mainPane, "Center");

    f.setSize(200, 200);
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    }
    }
    不过,如果用swing的JTabbedPane来做,则要简单得多得多,如下:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class ThreePagesSwing {
    Frame f = new Frame("CardLayout");

    JTabbedPane mainPane = new JTabbedPane(); // 设置一个JTabbedPane用作主面板 Button page1Button;
    Label page2Label;
    TextArea page3Text;
    Button page3Top;
    Button page3Bottom; public static void main(String args[]) {
    new ThreePagesSwing().go();
    } public void go() {
    mainPane.add(page1Button = new Button("Button page"), "page1");
    mainPane.add(page2Label = new Label("Label page"), "page2");
    Panel panel = new Panel();
    panel.setLayout(new BorderLayout());
    panel.add(page3Text = new TextArea("Composite page"), "Center");
    panel.add(page3Top = new Button("Top button"), "North");
    panel.add(page3Bottom = new Button("Bottom button"), "South");
    mainPane.add(panel, "panel");

    f.add(mainPane); f.setSize(200, 200);
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    }
    }
      

  5.   

    swing 继承的awt是么?所以用swing包的时候也要加上awt,我这样理解对么?
      

  6.   

    你用了什么包中的类,就import什么包啊,这个和继承完全没有关系的。swing是对awt的升级换代。但是,很多awt中的类,比如布局管理器,还是必需的。swing补充了一些新的,但主要的布局管理类都在awt中。
    还有,主要的UI事件监听器都在awt.event中。
    所以,开发swing界面也是少不了awt和awt.event这两个包的。