Java卡片布局管理器解释及实例
程序员文章站
2024-02-24 14:06:10
由 cardlayout 类实现的布局管理器称为卡片布局管理器,用来操纵其所管理容器中...
由 cardlayout 类实现的布局管理器称为卡片布局管理器,用来操纵其所管理容器中包含的容器或组件。每个直接添加到其所管理容器中的容器或组件为一个卡片,最先被添加的容器或组件被认为是第一个卡片,最后被添加的则为最后一个卡片,初次运行时将显示第一个卡片。下面,我们就来通过一个实例看看它是怎么用的。
源码:
import java.awt.borderlayout; import java.awt.cardlayout; import java.awt.color; import java.awt.insets; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.uimanager; public class testmain extends jframe { private jpanel pane = null; // 主要的jpanel,该jpanel的布局管理将被设置成cardlayout private jpanel p = null; // 放按钮的jpanel private cardlayout card = null; // cardlayout布局管理器 private jbutton button_1 = null; // 上一步 private jbutton button_2 = null; // 下一步 private jbutton b_1 = null, b_2 = null, b_3 = null; // 三个可直接翻转到jpanel组件的按钮 private jpanel p_1 = null, p_2 = null, p_3 = null; // 要切换的三个jpanel public testmain() { super("cardlayout test"); try { // 将lookandfeel设置成windows样式 uimanager.setlookandfeel("com.sun.java.swing.plaf.windows.windowslookandfeel"); } catch (exception ex) { ex.printstacktrace(); } /**创建一个具有指定的水平和垂直间隙的新卡片布局*/ card = new cardlayout(5, 5); pane = new jpanel(card); // jpanel的布局管理将被设置成cardlayout p = new jpanel(); // 构造放按钮的jpanel button_1 = new jbutton("< 上一步"); button_2 = new jbutton("下一步 >"); b_1 = new jbutton("1"); b_2 = new jbutton("2"); b_3 = new jbutton("3"); b_1.setmargin(new insets(2,2,2,2)); b_2.setmargin(new insets(2,2,2,2)); b_3.setmargin(new insets(2,2,2,2)); p.add(button_1); p.add(b_1); p.add(b_2); p.add(b_3); p.add(button_2); p_1 = new jpanel(); p_2 = new jpanel(); p_3 = new jpanel(); p_1.setbackground(color.red); p_2.setbackground(color.blue); p_3.setbackground(color.green); p_1.add(new jlabel("jpanel_1")); p_2.add(new jlabel("jpanel_2")); p_3.add(new jlabel("jpanel_3")); pane.add(p_1, "p1"); pane.add(p_2, "p2"); pane.add(p_3, "p3"); /**下面是翻转到卡片布局的某个组件,可参考api中的文档*/ button_1.addactionlistener(new actionlistener(){ // 上一步的按钮动作 public void actionperformed(actionevent e) { card.previous(pane); } }); button_2.addactionlistener(new actionlistener(){ // 下一步的按钮动作 public void actionperformed(actionevent e) { card.next(pane); } }); b_1.addactionlistener(new actionlistener() { // 直接翻转到p_1 public void actionperformed(actionevent e) { card.show(pane, "p1"); } }); b_2.addactionlistener(new actionlistener() { // 直接翻转到p_2 public void actionperformed(actionevent e) { card.show(pane, "p2"); } }); b_3.addactionlistener(new actionlistener() { // 直接翻转到p_3 public void actionperformed(actionevent e) { card.show(pane, "p3"); } }); this.getcontentpane().add(pane); this.getcontentpane().add(p, borderlayout.south); this.setdefaultcloseoperation(jframe.exit_on_close); this.setsize(300, 200); this.setvisible(true); } public static void main(string[] args) { new testmain(); } }
注意:当利用方法 next() 或 previous() 显示卡片时,将循环显示所有卡片。例如,如果当前显示的是最后一个卡片,再调用方法 next() 将显示第一个卡片;如果当前显示的是第一个卡片,再调用方法 previous() 将显示最后一个卡片。
希望本文对大家java程序设计有所帮助,同时,也请大家继续关注!