黑马程序员技术交流社区

标题: 关于卡片布局的使用 [打印本页]

作者: 戴振良    时间: 2012-3-27 17:43
标题: 关于卡片布局的使用
  1. import java.awt.CardLayout;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;

  4. import javax.swing.JButton;
  5. import javax.swing.JFrame;
  6. import javax.swing.JPanel;

  7. public class CardLayoutTest extends JFrame implements ActionListener {

  8.         JButton btnFirst=new JButton("第一张卡片0");//创建按钮
  9.         JButton btnPrevious=new JButton("上一张卡片");
  10.         JButton btnMiddle=new JButton("中间卡片25");
  11.         JButton btnNext=new JButton("下一张卡片");       
  12.         JButton btnLast=new JButton("最后一张卡片50");
  13.         JPanel panel=new JPanel(); //创建面板容器
  14.         CardLayout cardLayout=new CardLayout(); //创建卡片布局管理器
  15.        
  16.         public CardLayoutTest() {
  17.                
  18.                 this.setLayout(null);  //设置窗体不使用布局管理器
  19.                 panel.setLayout(cardLayout);//设置Jpanel容器使用卡片布局管理器
  20.                
  21.                 this.setBounds(200, 200, 300, 220);        //设置窗体的位置和大小
  22.                 panel.setBounds(10, 40, 100, 100);     //设置面板容器的位置和大小
  23.                 btnFirst.setBounds(120,15,150,20);      //设置按钮的位置和大小
  24.                 btnPrevious.setBounds(120, 45, 150, 20);
  25.                 btnMiddle.setBounds(120, 75, 150, 20);
  26.                 btnNext.setBounds(120, 105, 150, 20);
  27.                 btnLast.setBounds(120,135, 150, 20);
  28.                
  29.                 btnFirst.addActionListener(this); //注册按钮监听器
  30.                 btnPrevious.addActionListener(this);
  31.                 btnMiddle.addActionListener(this);
  32.                 btnNext.addActionListener(this);
  33.                 btnLast.addActionListener(this);
  34.                
  35.                 for(int i=0;i<51;i++) {//通过循环给panel容器增加51个按钮组件
  36.                         JButton jb=new JButton("卡片"+i);//----------------------------------------------------->代码1
  37.                         jb.addActionListener(this);
  38.                         panel.add(jb,""+i);//-------------------------------------------------------------------------->代码2               
  39.                 }
  40.                
  41.                 this.add(panel);   //添加面板容器到窗体
  42.                 this.add(btnFirst); //添加按钮到窗体
  43.                 this.add(btnPrevious);
  44.                 this.add(btnMiddle);
  45.                 this.add(btnNext);
  46.                 this.add(btnLast);
  47.                        
  48.                 this.setVisible(true); //显示窗体
  49.                        
  50.         }
  51.        
  52.         //实现ActionListener接口的类必覆盖下面的方法
  53.         public void actionPerformed(ActionEvent e) {
  54.                
  55.                 if(e.getSource()==btnFirst) {
  56.                         cardLayout.first(panel);
  57.                 } else if(e.getSource()==btnPrevious) {
  58.                         cardLayout.previous(panel);
  59.                 } else if(e.getSource()==btnNext) {
  60.                         cardLayout.next(panel);
  61.                 } else if(e.getSource()==btnLast) {
  62.                         cardLayout.last(panel);
  63.                 } else if(e.getSource()==btnMiddle){
  64.                         cardLayout.show(panel,"25");
  65.                 }
  66.                
  67.         }

  68.         public static void main(String[] args) {
  69.                
  70.                 new CardLayoutTest();
  71.                
  72.         }

  73. }
  74. //问题1:代码1处的JPanel.add方法,我在jdk找不到这样需要两个参数的方法(一个组件参数,一个字符串参数)
  75. //问题2:JPanel.add方法明明有只要一个参数的方法(只需组件),我试过把代码2后面的字符串(""+i)参数删掉,
  76. //编译时没有错,运行就报错,不知道是什么原因,而奇怪的是我删除代码1处的(""+i)又不会报错
  77. //问题3:我把代码2处的"+i"删除之后,运行时点击“中间数字25”这个按钮时不会显示25,而其他按钮功能正常,怎么回事呢?
  78. //问题4:我把代码1处的"+i"删除之后,运行时点任何按钮都不会显示数字,那代码2的i是干嘛用的呢?
  79. //Jframe窗体默认的布局管理器是什么?
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2