- 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" 。为什么要写这个?能不写或随便写吗?
这是为方便操作来定义的,只要可以明确区分就可以按自己要求定义