您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 精通Java Swing程序设计
  所属分类: Java
  开发工具:
  文件大小: 150kb
  下载次数: 0
  上传时间: 2009-08-27
  提 供 者: tb***
 详细说明: Swing读书笔记 1-3:版面管理器(Layout Menager) |BorderLayout |FlowLayout |GridLayout AWT----|CardLayout |GridBagLayout Swing--|BoxLayout 1-3-1:BorderLayout的使用: BorderLayout的类层次结构图: java.lang.Object --java.awt.Bord erLayout 构造函数:BorderLayout()建立一个没有间距的border layout BorderLayout(int hgap,int vgap)建立一个组件间有间距的border layout BorderLayout将版面划分为东、西、南、北、中 例子:BorderLayoutDemo.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class BorderLayoutDemo{ public BorderLayoutDemo(){ JFrame f=new JFrame(); Container contentPane=f.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(new JButton("EAST"),BorderLayout.EAST); contentPane.add(new JButton("WEST"),BorderLayout.WEST); contentPane.add(new JButton("SOUTH"),BorderLayout.SOUTH); contentPane.add(new JButton("NORTH"),BorderLayout.NORTH); contentPane.add(new JLabel("CENTER",JLabel.CENTER),BorderLayout.CENTER); f.setTitle("BorderLayout"); f.pack(); f.setVisible(true); /***read**/ /*处理关闭窗口的操作,若你没写这一段,就算你已经关闭窗口了,但程序并不会终止。 */ f.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); /***read**/ } public static void main(String[] args){ BorderLayoutDemo b=new BorderLayoutDemo(); } } 设置组件的间距,你可以使用有间距参数的BorderLayout构造函数,也可以利用BorderLayout的setHgap(int hgap)与 setVgap(int vgap)两个方法来达成。 1-3-2:FlowLayout的使用: FlowLayout的类层次结构图: java.lang.Object --java.awt.FlowLayout 构造函数:FlowLayout()建立一个新的Flow Layout,此FlowLayout默认值是居中对齐,组件彼此有5单位的水平与垂直间距。 FlowLayout(int align)建立一个新的Flow Layout,此FlowLayout可设置排列方式,组件彼此有5单位的水平与垂直 间距。 FlowLayout(int align,int hgap,int vgap)建立一个新的Flow Layout,此FlowLayout可设置排列方式与组件间距。 FlowLayoutDemo.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FlowLayoutDemo{ public FlowLayoutDemo(){ JFrame f=new JFrame(); Container contentPane=f.getContentPane(); /*你可以使用有间距的FlowLayout构造函数,使FlowLayout的排列具有间距,并 *并可利用排列方向参数来指定靠什么方向排列,FlowLayout共有五种排列方式, *依次是CENTER(默认值),LEFT,RIGHT,LEADING,TRAILING,若我们将下面程序第13 *行改成contentPane.setLayout(new FlowLayout(FlowLayout.LEFT)); */ contentPane.setLayout(new FlowLayout()); contentPane.add(new JButton("first")); contentPane.add(new JButton("second")); contentPane.add(new JButton("third")); contentPane.add(new JButton("fourth")); contentPane.add(new JButton("fifth")); contentPane.add(new JButton("Last")); f.setTitle("FlowLayout"); //f.pack();//必须将f.pach()去掉,否则setSize功能将没有作用 f.setSize(400,220); f.setVisible(true); f.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public static void main(String[] args){ FlowLayoutDemo b=new FlowLayoutDemo(); } } 1-3-3:GridLayout的使用: GridLayout的类层次结构图: java.lang.Object --java.awt.GridLayout GridLayout比FlowLayout多了行和列的设置,也就是说你要先设置GridLayout共有几行几列,就如同二维平面一般,然后你加 进去的组件会先填第一行的格子,然后再从第二行开始填,依此类扒,就像是一个个的格子一般。而且GridLayout会将所填进去组 件的大小设为一样。 构造函数:GridLayout()建立一个新的GridLayout,默认值是1行1列。 GridLayout(int rows,int cols)建立一个几行几列的GridLayout. GridLayout(int rows,int cols, int hgap,int vgap)建立一个几行几列的GridLayout,并设置组件的间距。 例子:GridLayoutDemo.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CardLayoutDemo implements ActionListener{ JPanel p1,p2,p3,p4; int i=1; JFrame f; public CardLayoutDemo(){ f=new JFrame();//当做top-level组件 Container contentPane=f.getContentPane(); contentPane.setLayout(new GridLayout(2,1)); p1=new JPanel(); Button b=new Button("Change Card"); b.addActionListener(this);//当按下"Change Card"时,进行事件监听,将会有系统操作产生。 p1.add(b); //处理操作在52-64行. contentPane.add(p1); p2=new JPanel(); p2.setLayout(new FlowLayout()); p2.add(new JButton("first")); p2.add(new JButton("second")); p2.add(new JButton("third")); p3=new JPanel(); p3.setLayout(new GridLayout(3,1)); p3.add(new JButton("fourth")); p3.add(new JButton("fifth")); p3.add(new JButton("This is the last button")); p4=new JPanel(); p4.setLayout(new CardLayout()); p4.add("one",p2); p4.add("two",p3); /*要显示CardLayout的卡片,除了用show(Container parent,String name)这个方法外 *,也可试试first(Container),next(Container),previous(Container),last(Container)这 *四个方法,一样可以达到显示效果。 */ ((CardLayout)p4.getLayout()).show(p4,"one"); contentPane.add(p4); f.setTitle("CardLayout"); f.pack(); f.setVisible(true); f.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public void actionPerformed(ActionEvent event){ switch(i){ case 1: ((CardLayout)p4.getLayout()).show(p4,"two"); break; case 2: ((CardLayout)p4.getLayout()).show(p4,"one"); break; } i++; if (i==3) i=1; f.validate(); } public static void main(String[] args){ new CardLayoutDemo(); } } 1-3-5:GridBagLayout的使用:是java中最有弹性但也是最复杂的一种版面管理器。它只有一种构造函数,但必须配合 GridBagConstraints才能达到设置的效果。 GridBagLayout的类层次结构图: java.lang.Object --java.awt.GridBagLayout 构造函数: GirdBagLayout()建立一个新的GridBagLayout管理器。 GridBagConstraints()建立一个新的GridBagConstraints对象。 GridBagConstraints(int gridx,int gridy,int gridwidth,int gridheight,double weightx,double weighty, int anchor,int fill, Insets insets,int ipadx,int ipady)建立一个新的GridBagConstraints对象 ,并指定其参数的值。 参数说明: gridx,gridy:设置组件的位置,gridx设置为GridBagConstraints.RELATIVE代表此组件位于之前所加入组件的右边。 若将gridy设置为GridBagConstraints.RELATIVE代表此组件位于以前所加入组件的下面。建议定义出 gridx,gridy的位置,以便以后维护程序。表示放在几行几列,gridx=0,gridy=0时放在0行0列。 gridwidth,gridheight:用来设置组件所占的单位长度与高度,默认值皆为1。你可以使用GridBagConstraints.REMAINDER常 量,代表此组件为此行或此列的最后一个组件,而且会占据所有剩余的空间。 weightx,weighty:用来设置窗口变大时,各组件跟着变大的比例,当数字越大,表示组件能得到更多的空间,默认值皆为0。 anchor: 当组件空间大于组件本身时,要将组件置于何处,有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、 WEST、NORTHWEST可供选择。 insets:设置组件之间彼此的间距,它有四个参数,分别是上,左,下,右,默认为(0,0,0,0). ipadx,ipady:设置组件内的间距,默认值为0。 我们以前提过,GridBagLayout里的各种设置都必须通过GridBagConstraints,因此当我们将GridBagConstraints的参数都设置 好了之后,必须new一个GridBagConstraints的对象出来,以便GridBagLayout使用。 例子: GridBagLayoutDemo.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GridBagLayoutDemo{ public GridBagLayoutDemo(){ JButton b; GridBagConstraints c; int gridx,gridy,gridwidth,gridheight,anchor,fill,ipadx,ipady; double weightx,weighty; Insets inset; JFrame f=new JFrame(); GridBagLayout gridbag=new GridBagLayout(); Container contentPane=f.getContentPane(); contentPane.setLayout(gridbag); b=new JButton("first"); gridx=0; gridy=0; gridwidth=1; gridheight=1; weightx=10; weighty=1; anchor=GridBagConstraints.CENTER; fill=GridBagConstraints.HORIZONTAL; inset=new Insets(0,0,0,0); ipadx=0; ipady=0; c=new GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor, fill,inset,ipadx,ipady); gridbag.setConstraints(b,c); contentPane.add(b); b=new JButton("second"); gridx=1; gridy=0; gridwidth=2; gridheight=1; weightx=1; weighty=1; anchor=GridBagConstraints.CENTER; fill=GridBagConstraints.HORIZONTAL; inset=new Insets(0,0,0,0); ipadx=50; ipady=0; c=new GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor, fill,inset,ipadx,ipady); gridbag.setConstraints(b,c); contentPane.add(b); b=new JButton("third"); gridx=0; gridy=1; gridwidth=1; gridheight=1; weightx=1; weighty=1; anchor=GridBagConstraints.CENTER; fill=GridBagConstraints.HORIZONTAL; inset=new Insets(0,0,0,0); ipadx=0; ipady=50; c=new GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor, fill,inset,ipadx,ipady); gridbag.setConstraints(b,c); contentPane.add(b); b=new JButton("fourth"); gridx=1; gridy=1; gridwidth=1; gridheight=1; weightx=1; weighty=1; anchor=GridBagConstraints.CENTER; fill=GridBagConstraints.HORIZONTAL; inset=new Insets(0,0,0,0); ipadx=0; ipady=0; c=new GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor, fill,inset,ipadx,ipady); gridbag.setConstraints(b,c); contentPane.add(b); b=new JButton("This is the last button"); gridx=2; gridy=1; gridwidth=1; gridheight=2; weightx=1; weighty=1; anchor=GridBagConstraints.CENTER; fill=GridBagConstraints.HORIZONTAL; inset=new Insets(0,0,0,0); ipadx=0; ipady=50; c=new GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor, fill,inset,ipadx,ipady); gridbag.setConstraints(b,c); contentPane.add(b); f.setTitle("GridBagLayout"); f.pack(); f.setVisible(true); f.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public static void main(String[] args){ new GridBagLayoutDemo(); } } 1-3-5:BoxLayout的使用: BoxLayout的类层次结构图: java.lang.Object --java.awt.BoxLayout BoxLayout提供了两个常数X_AXIS,Y_AXIS来表示水平或垂直排列。若放进去的组件不等高,则系统将会使所有的组件与最高组件 等高,还有,若你将组件都摆在同一行时,系统不因组件宽度在于Container的宽度,而使组件自动摆在下一行,你必须自行处理换 行的操作。 构造函数: BoxLayout(Container targe,int axis)建立一个水平或垂直的BoxLayout. 讲到BoxLayout,我们就不得不提到Box这个Container,Box这个Container默认的Layout为BoxLayout,而它只能使用这个Layout, 否则编译时会有Error产生,如同前面所讲的,BoxLayout是以水平或垂直方式排列,因此,当我们要产生一个Box Container时, 就必须指定它的排列方式,下面为Box的构造函数: Box(int axis) 建立一个Box Container,并指定组件的排列方式是水平或垂直。 上面的axis参数,我们可以使用BoxLayout.X_AXIS或BoxLayout.Y_AXIS来指定。或是利用Box类所提供的两个方法: createHorizontalBox()与createVerticalBox(),来建立BoxContainer. Box类提供4种透明的组件来做更方便的版面管理。分别是glue、strut、rigid、filler: 下面以两个相连的按钮当例子,起始状态如下: B1.java 1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*; 4 public class B1{ 5 public B1(){ 6 JFrame f=new JFrame(); 7 Container contentPane=f.getContentPane(); 8 Box baseBox=Box.createHorizontalBox(); 9 contentPane.add(baseBox); 10 baseBox.add(new JButton("A")); 11 baseBox.add(new JButton("B")); 12 f.setTitle("BoxLayout"); 13 f.setSize(new Dimension(200,50)); 14 f.setVisible(true); 15 f.addWindowListener( 16 new WindowAdapter(){ 17 public void windowClosing(WindowEvent e){ 18 System.exit(0); 19 } 20 } 21 ); 22 } public static void main(String[] args){ B1 b=new B1(); } } Glue:当glue插入在两组件间时,它会将两组件挤到最左与最右(或最上与最下),透明的glue将会占满整个中间的空间。 例: 在10与11行间加入下面一行程序: baseBox.add(Box.createHorizontalGlue()); Strut:当你不想将A与B按钮挤到最旁边时,你可以使用Strut组件,来设置所需要的大小,但仅能限定一维的大小,例如限定 水平或垂直高度。 例:在10与11行间加入下面一行程序: baseBox.add(Box.createHorizontalStrut(50));//A,B之间间隔50个像素。 Rigid:这个透明组件跟Strut很像,但它可以设置二维的限制,也就是可以设置水平与垂直的限制宽度。 例:在10与11行间加入下面一行程序: baseBox.add(Box.createRigidArea(new Dimension(50,50))); 为了将Rigid的高度功能显示出来,因此以pack()方法代替setSize()方法,11行替换为:f.pack(); 若我们将高度再拉长,例如baseBox.add(Box.createRigidArea(new Dimension(50,50)));的Dimension改成(50,100),则两 组件的上下空白将会增大,因为透明的Rigid组件高度增高了。 Filler:Filler是Box的inner class,它的功能跟Rigid很像,都可以指定长宽的大小限制,且Filler可以指定最大、较佳、最小的长 宽大小,以下是Filler的构造函数: Box.Filler(Dimension min,Dimension pref Dimension max)建立一个指定大小的Filler对象。 参数min表示最小的显示区域大小,如同上面的例子所示,若所设置最小区域的高度大于按钮A与B的高度,则按钮A与B的上方 与下方将有空白出现。 pref表示较佳的显示区域大小。max表示最大的显示区域大小。 例:在10与11行间加入下面一行程序: baseBox.add(new Box.Filler(new Dimension(50,50), new Dimension(100,50), new Dimension(200,50))); Box类所提供的方法: Static Component createGlue()构造一个Glue组件可向水平与垂直方向延伸 Static Box createHorizontalBox()构造一个水平排列的Box组件 Static Component createHorizontalGlue()构造一个水平的Glue组件 Static Component createHorizontalStrut(int width)构造一个水平的Strut组件 Static Component createRigidArea(Dimension d)构造一个Rigid组件 Static Box createVerticalBox()构造一个垂直排列的Box组件 Static Component createVerticalGlue()构造一个垂直的Glue组件 Static Component createVerticalStrut(int height)构造一个垂直的Strut组件 AccessibleContext getAccessibleContext()取得与JComponent相关边的AccessibleContext Void setLayout(LayoutManager l)丢出AWTError,因为Box只能使用BoxLayout 例子:BoxLayoutDemo.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class BoxLayoutDemo{ public BoxLayoutDemo(){ JFrame f=new JFrame(); Container contentPane=f.getContentPane(); Box baseBox=Box.createHorizontalBox();//先产生水平排列方式的Box组件,当作基底容器(BaseBox) contentPane.add(baseBox); /*产生垂直排列方式的Box组件来安置第一与第三个按钮 */ Box vBox=Box.createVerticalBox(); JButton b=new JButton("first"); vBox.add(b); b=new JButton("third"); b.setMaximumSize(new Dimension(100,150)); vBox.add(b); baseBox.add(vBox); /*产生垂直排列方式的Box组件来安置第二与另一个水平排列方式的Box组件 */ Box vBox1=Box.createVerticalBox(); baseBox.add(vBox1); b=new JButton("second"); b.setAlignmentX(Component.CENTER_ALIGNMENT); b.setMaximumSize(new Dimension(300,50)); vBox1.add(b); Box hBox=Box.createHorizontalBox(); vBox1.add(hBox); /*将第四与最后一个按钮加入水平排列方式的Box组件中 */ Box vBox2=Box.createVerticalBox(); vBox2.add(Box.createVerticalStrut(50)); vBox2.add(new JButton("fourth")); vBox2.add(Box.createVerticalStrut(50)); hBox.add(vBox2); Box vBox3=Box.createVerticalBox(); vBox3.add(Box.createVerticalGlue()); vBox3.add(new JButton("THis is the last button")); hBox.add(vBox3); f.setTitle("BoxLayout"); f.pack(); f.setVisible(true); f.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public static void main(String[] args){ BoxLayoutDemo b=new BoxLayoutDemo(); } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 精通Java Swing程序设计
 输入关键字,在本站1000多万海量源码库中尽情搜索: