java的CardLayout
CardLayout答允我们在更巨大的拥有真正的文件夹卡片与一条边相遇的情况里建设大抵沟通于“卡片式对话框”的机关,我们必需压下一个卡片使差异的对话框带到前面来。在AWT里不是这样的:CardLayout是简朴的空的空格,我们可以自由地把新卡片带到前面来。(JFC/Swing库包罗卡片式的窗格看起来很是的棒,且可以我们处理惩罚所有的细节。)
1. 连系机关(Combining layouts)
下面的例子连系了更多的机关范例,在最初只有一个机关打点器被措施片或应用措施操纵看起来相当的坚苦。这是事实,但假如我们建设更多的面板工具,每个面板都能拥有一个机关打点器,而且像被集成到措施片或应用措施中一样利用措施片或应用措施的机关打点器。这就象下面措施中的一样给了我们更多的机动性:
//: CardLayout1.java // Demonstrating the CardLayout import java.awt.*; import java.applet.Applet; class ButtonPanel extends Panel { ButtonPanel(String id) { setLayout(new BorderLayout()); add("Center", new Button(id)); } } public class CardLayout1 extends Applet { Button first = new Button("First"), second = new Button("Second"), third = new Button("Third"); Panel cards = new Panel(); CardLayout cl = new CardLayout(); public void init() { setLayout(new BorderLayout()); Panel p = new Panel(); p.setLayout(new FlowLayout()); p.add(first); p.add(second); p.add(third); add("North", p); cards.setLayout(cl); cards.add("First card", new ButtonPanel("The first one")); cards.add("Second card", new ButtonPanel("The second one")); cards.add("Third card", new ButtonPanel("The third one")); add("Center", cards); } public boolean action(Event evt, Object arg) { if (evt.target.equals(first)) { cl.first(cards); } else if (evt.target.equals(second)) { cl.first(cards); cl.next(cards); } else if (evt.target.equals(third)) { cl.last(cards); } else return super.action(evt, arg); return true; } } ///:~
这个例子首先会建设一种新范例的面板:BottonPanel(按钮面板)。它包罗一个单独的按钮,安顿在BorderLayout的中央,那意味着它将布满整个的面板。按钮上的标签将让我们知道我们在CardLayout上的谁人面板上。
在措施片里,面板卡片大将存放卡片和机关打点器CL因为CardLayout必需构成类,因为当我们需要处理惩罚卡片时我们需要会见这些句柄。
这个措施片酿成利用BorderLayout来代替它的默认FlowLayout,建设面板来容纳三个按钮(利用FlowLayout),而且这个面板安放在措施片末端的“North”。卡单方面板增加到措施片的“Center”里,有效地占据面板的其余处所。
当我们增加BottonPanels(可能任何其它我们想要的组件)到卡单方面板时,add()要领的第一个自变量不是“North”,“South”等等。相反的是,它是一个描写卡片的字符串。假如我们想轻击那张卡片利用字符串,我们就可以利用,固然这字符串不会显示在卡片的任那里所。利用的要领不是利用action();代之利用first()、next()和last()等要领。请查察我们有关其它要领的文件。
在Java中,利用的一些卡片式面板布局十分的重要,因为(我们将在后头看到)在措施片编程中利用的弹出式对话框是十分令人沮丧的。对付Java 1.0版的措施片而言,CardLayout是独一有效的取得许多差异的“弹出式”的窗体。