当前位置: 代码迷 >> J2SE >> java 卡片布局管理器的一点小疑点
  详细解决方案

java 卡片布局管理器的一点小疑点

热度:8819   发布时间:2013-02-25 00:00:00.0
java 卡片布局管理器的一点小问题
Java code
import java.awt.*;import java.awt.event.*;public class CardLayoutDemo extends Frame implements MouseListener{    private Button first=new Button("A");    private Button second=new Button("B");    private Button third=new Button("C");    private CardLayout cl=new CardLayout();    private Panel cards=new Panel();    public CardLayoutDemo(String string){        super(string);        init();    //调用init方法    }        public void init(){        setLayout(new BorderLayout());        setSize(500, 500);                Panel p=new Panel();        p.setLayout(new FlowLayout());                first.addMouseListener(this);        second.addMouseListener(this);        third.addMouseListener(this);                p.add(first);        p.add(second);        p.add(third);                add("North",p);        cards.setLayout(cl);        cards.add("First cards",new Button("AA"));        cards.add("second Button",new Button("BB"));        cards.add("third cards",new Button("CC"));        add("Center",cards);                addWindowListener(new WindowAdapter(){            public void WindowClosing(WindowEvent evt){                setVisible(false);                dispose();                System.exit(0);            }        });                setVisible(true);    }        public static void main(String[] args) {        new CardLayoutDemo("ABCD");   //创建CardLayoutDemo类型变量            }    public void mouseClicked(MouseEvent evt){    if(evt.getSource()==first){    cl.first(cards);}else if(evt.getSource()==second){    cl.first(cards);    cl.next(cards);}else if(evt.getSource()==third){    cl.last(cards);}}    public void mouseEntered(MouseEvent arg0){    }    public void mouseExited(MouseEvent arg0){    }    public void mousePressed(MouseEvent arg0){    }    public void mouseReleased(MouseEvent arg0){    }    }


有些地方一直搞不懂,请老手教下新手

1.前面学了其他的布局管理器。 都没看到 实例化布局管理器。这里有private CardLayout cl=new CardLayout(); 为什么要对布局器实例化对象呢?有什么用意吗?

2.init方法中 设置窗口布局和大小的时候 不需要先对Frame窗口实例化再调用吗? 为什么可以直接这样写?

3.在main中 为什么不需要设置对象啊?

4.为什么要在构造方法中调用init方法啊?

5.在cards中添加按钮 为什么需要些"first Button" 。为什么要写这个?能不写或随便写吗?

------解决方案--------------------------------------------------------
1、Frame默认的布局管理器是BorderLayout,容器都有默认布局管理器,所以不用设置,这个例子是卡片布局,所以要new 出来
2、CardLayoutDemo 继承 Frame 
3、 new CardLayoutDemo("ABCD"); 这句就已经new 了一个CardLayoutDemo对象。然后调用构造方法

------解决方案--------------------------------------------------------
你这个CardLayoutDemo的实例,没有继承Frame,也没有Frame的成员不会'有反应'
------解决方案--------------------------------------------------------
第一个代码通过调用父类的构造函数 将 实例化时传入的参数 作为了Frame的标题
你这个代码可以把参数 再传给init,然后在init中作为Frame创建时的参数,不过整个代码就没有原来的好,有点乱

------解决方案--------------------------------------------------------
1)new 个对象而已,用意就是创建个布局管理器罢了
2)init方法里是一些初始化代码,你不觉得把初始化代码放在一个名为“初始化”的函数里很专业么?特别是在初始化代码较多的时候。
3)同上
4)这个布局管理器有点特别,他被设计成给每个容器加个标识,你切换视图的时候就用这个标识。 那个“firest Button”就是个标识而已~ 你愿意的话可以叫它“阿猫阿狗”,注意不要有重复的标识~
------解决方案--------------------------------------------------------
在cards中添加按钮 为什么需要些"first Button" 。为什么要写这个?能不写或随便写吗?
这是为方便操作来定义的,只要可以明确区分就可以按自己要求定义
  相关解决方案