[疯狂Java笔记]AWT:CardLayout卡堆布局

1. CardLayout——卡堆布局:

    1) 顾名思义就是一堆卡片,只有最上面的那张卡片可见,每张卡片存放一个组件,只有最上面的那个组件才是可见的,底下的都会被遮盖住;

    2) 构造器:

         i. 默认无参构造器:CardLayout();

         ii. 指定和边界的间隔:CardLayout(int hgap, int vgap); // 指定了组件和卡片边界之间的间距

    3) 管理器如何对组件进行布局:

         i. 容器必须先setLayout指定卡堆布局,然后容器add组件,组件按照add的顺序从前往后编号;

         ii. 布局管理器不能在setLayout中临时new,必须提前new好并用引号保留它的访问方式,因为后面布局的管理需要引用该布局管理器:CardLayout cl = new CardLayout();

         iii. 使用管理器cl的各种方法控制卡片的显示:都是CardLayout的方法

              a. void first(Container parent); // 显示父容器里的第一张卡片(即第一个被add的组件)

              b. void last(Container parent); // 显示父容器里最后一张卡片

              c. void previous(Container parent); // 显示前一张卡片

              d. void next(Container parent); // 显示下一张卡片

              e. void show(Container parent, String name); // 显示标签为name的那个卡片

!!这里的标签就是指组件的文本内容,比如new Button("push");,那么"push"就是按钮组件的标签文本内容,这个name就是指这个;

!!add组件时可以指定组件的标签,Container对add的重载:Component Container.add(String name, Component comp); // name指定了该组件在容器中的字符串标识

!!我们可以看到setLayout中cl是参数,在调用first等方法是容器c有时cl的参数,这不符合面向对象的编程思想,因此AWT其实是一种面向过程的工具,因此非常笨拙,代码相当冗余;

    4) 示例:

public class AwtTest {

	private String[] names = { "1", "2", "3", "4", "5" };

	public void init() {
		Frame f = new Frame("CardLayout Test");
		
		// 卡堆面板
		Panel p = new Panel();
		CardLayout cl = new CardLayout();
		p.setLayout(cl);
		
		// 卡堆上的5个组件初始化
		for (int i = 0; i < 5; i++) {
			p.add(names[i], new Button(names[i]));
		}
		
		// 卡堆下5个按钮具有控制功能,设置它们的监听器
		ActionListener listener = e -> {
			switch (e.getActionCommand()) {
			case "previous":
				cl.previous(p);
				break;
			case "next":
				cl.next(p);
				break;
			case "first":
				cl.first(p);
				break;
			case "last":
				cl.last(p);
				break;
			case "third":
				cl.show(p, "3");
				break;
			default:
				break;
			}
		};
		
		// 卡堆下的5个控制按钮组成一个面板
		Panel pb = new Panel();
		Button prev = new Button("previous");
		Button next = new Button("next");
		Button first = new Button("first");
		Button last = new Button("last");
		Button third = new Button("third");
		prev.addActionListener(listener);
		next.addActionListener(listener);
		first.addActionListener(listener);
		last.addActionListener(listener);
		third.addActionListener(listener);
		pb.add(prev);
		pb.add(next);
		pb.add(first);
		pb.add(last);
		pb.add(third);
		
		f.add(p); // 卡堆用来显示
		f.add(pb, BorderLayout.SOUTH); // 控制面板
		
		f.pack();
		f.setVisible(true);
	}

	public static void main(String[] args) {
		new AwtTest().init();
	}

}



你可能感兴趣的:(awt,CardLayout,疯狂Java)