⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jv0502.htm

📁 很不错到
💻 HTM
📖 第 1 页 / 共 3 页
字号:
  5: public void init() {<br>  
  6: setBackground(Color.white);<br>  
  7: }<br>  
  8: <br>  
  9: public void draw() {<br>  
  10: <br>  
  11: add(new Label("Your name: "));<br>  
  12: add(new TextField(30));<br>  
  13: add(new Label("Sex: "));<br>  
  14: CheckboxGroup cbg = new CheckboxGroup();<br>  
  15: add(new Checkbox("Male ", cbg, true));<br>  
  16: add(new Checkbox("Female ", cbg, false));<br>  
  17: add(new Label("What are you like: "));<br>  
  18: add(new Checkbox("Apple "));<br>  
  19: add(new Checkbox("orange "));<br>  
  20: add(new Checkbox("Strawberry "));<br>  
  21: add(new Checkbox("Peach "));<br>  
  22: add(new Label("How much do you eat them per week: "));<br>  
  23: Choice c = new Choice();<br>  
  24: c.addItem("less than 1kg ");<br>  
  25: c.addItem("1kg to 3kg");<br>  
  26: c.addItem("more than 3kg");<br>  
  27: add(c);<br>  
  28: add(new Label("What's your opnion of eating fruit: "));<br>  
  29: add(new TextArea("I think ",3,60));<br>  
  30: add(new Button(" OK "));<br>  
  31: add(new Button("Clear "));<br>  
  32: }<br>  
  33: }<br>  
  这里的内容在前面都已出现过,所以这段程序就不详细解释了。图5-8是这段程序的运行结果。</p>
<p>  <IMG height=235 src="tu5-8.gif" 
width=408></p>
<p>  图5-8 较复杂的例子<br>  
  从这个结果来看,如果只是简单地把构件添加到屏幕上,效果往往不大理想,所以必须进行排版设计。下一小节将介绍如何排版。</p>
<p>  <a name="523"></a>5.2.3 版面设置</p>
<p>  在以往的用户界面中,每个构件的位置一般是用点坐标确定的。但是在Java中,情况有所不同。Java的Applet需要运行在不同操作系统、不同的屏幕设置、不同的字体下,用点坐标来确定位置就难以适应各种情况,所以在Java中使用版面控制器来进行排版。使用版面控制器的优点的是能根据不同的屏幕自动进行排版,缺点是构件在屏幕上的确切位置难以确定。为此AWT提供五种版面可供选择:<br>  
  FlowLayout、GridLayout、GridBagLayout、BorderLayout和CardLayout。<br>  
  用户可以使用类似下面的语句来选择版面,<br>  
  public void init() {<br>  
  setLayout( new FlowLayout);<br>  
  }<br>  
  AWT构件在屏幕上的确切位置只取决于当前版面控制器所使用的版面,以及构件添加到屏幕上的顺序。下面来逐一介绍这五种版面。<br>  
  1. Flowlayout<br>  
  FlowLayout是最简单的版面,也是Java的缺省版面。它的排版原则是将构件从左向右、从上向下排列,如果这行放不下这个构件,就放入下一行。图5-9 
  是它的版面效果。</p>
<p>  <IMG height=37 src="tu5-9.gif" 
width=269></p>
<p>  图5-9 FlowLayout<br>  
  在FlowLayout中也可设置版面的对齐方式,可以是居中、靠左或靠右,缺省是居中。要设置对齐方式可以使用FlowLayout类中的变量LEFT、CENTER和RIGHT,语句如下。<br>  
  setLayout (new FlowLayout(FlowLayout.LEFT); <br>  
  此外FlowLayout中还可以设置横向和纵向的间隔,缺省是3个像素。设置间隔可以使用下面的语句。<br>  
  setLayout (new FlowLayout(FlowLayout.CENTER, 5, 5);<br>  
  语句执行后将横向和纵向间隔设置成5个像素。</p>
<p>  <IMG height=249 
src="tu5-10.gif" width=380></p>
<p>  图5-10 GridLayout<br>  
  2. GridLayout<br>  
  Grid在英语中是格子的意思,GridLayout顾名思义就是网格版面布局。在GridLayout中,屏幕被划分成网格状,每一个构件按照添加的顺序从左向右、从上向下地占据一个单元。所以在GridLayout中,构件添加的顺序就相当重要。要创建一个2×3的网格版面可以用以下的语句。图5-10是执行的结果。<br>  
  setLayout (new GridLayout(2,3));<br>  
  同样,GridLayout中也可以设置间隔。设置间隔的语句如下。<br>  
  setLayout( new GridLayout(2, 3, 5, 10);<br>  
  语句执行后将把横向间隔设置成5个像素,把纵向间隔设置成10个像素。<br>  
  3. GridBagLayout<br>  
  GridBagLayout是一种非常灵活的版面布局。它是在将屏幕划分成网格的基础上,允许每个构件占据一个或多个单元(显示区域)。GridBagLayout管理的每个构件都有一个相应的GridBagConstraints实例,通过这个实例来安排构件的位置。要有效的使用GridBagLayout类,必须为该构件定义一个GridBagConstraints实例,并正确设置实例变量。其实例变量如下。<br>
    gridx,gridy设置安放构件的网格单元的坐标。屏幕左上角的网格单元坐标是gridx=0,gridy=0。如果使用系统缺省值GridBagConstraints.RELATIVE,那么这个构件将放置在前一个添加的构件的右边或下边。<br>  
  gridwidth, gridheight以网格单元为单位设置显示区域的宽度和高度,缺省值为1。使用GridBagConstraints.REMAINDER可以设置这个构件是这一行或这一列中的最后一个,即占据剩下的网格单元。使用GridBagConstraints.RELATIVE将这个构件设置成占据这一行或这一列中除最后一个以外的所有网格单元。<br>  
  fill当显示区域大于构件实际尺寸时,设置如何重新安排构件的大小。可以使用的值有GridBagConstraints.NONE(缺省值),GridBagConstraints.HORIZONTAL(将构件横向扩充以填满显示区域),GridBagConstraints.VERTICAL(将构件纵向扩充以填满显示区域)或GridBagConstraints.BOTH(将构件扩充以填满显示区域)。<br>  
  ipadx, ipady设置构件之间的间隔。构件间的横向间隔为ipadx*2个像素,同样纵向间隔也为ipady*2个像素。<br>  
  insets设置构件与屏幕边缘之间的间隔。<br>  
  anchor,当构件的尺寸比显示区域小时,用来设置放置构件的位置(可以和fill参数一起使用)。其缺省值是GridBagConstraints.CENTER,或是GridBagConstraints.NORTH,<br>  
  GridBagConstraints.SOUTH,GridBagConstraints.EAST,GridBagConstraints.WEST<br>  
  GridBagConstraints.NORTHEAST,GridBagConstraints.NORTHWEST,GridBagConstraints.SOUTHEAST和GridBagConstraints.SOUTHWEST。<br>  
  weightx,weighty用来设置怎样分配空白区域(用于屏幕大小改变时)。其缺省值是0,所有的构件集中在包容器(container)的中央。所以需要改变设置时,必须给这两个参数赋值。<br>  
  下面是使用GridBagLayout进行排版的一个例子。<br>  
  1: import java.awt.*;<br>  
  2: import java.util.*;<br>  
  3: import java.applet.Applet;<br>  
  4:<br>  
  5: public class check extends Applet {<br>  
  6:<br>  
  7: protected void makebutton(String name, GridBagLayout gridbag, <br>  
  8: GidBagConstraints c) {<br>  
  9: Button button = new Button(name);<br>  
  10: gridbag.setConstraints(button, c);<br>  
  11: add(button);<br>  
  12: }<br>  
  13: <br>  
  14: public void init() {<br>  
  15: GridBagLayout gridbag = new GridBagLayout();<br>  
  16: GridBagConstraints c = new GridBagConstraints();<br>  
  17: setFont(new Font("Helvetica", Font.PLAIN, 14));<br>  
  18: setLayout(gridbag);<br>  19: c.fill =
     GridBagConstraints.BOTH;<br>  
  20: c.weightx = 1.0;<br>  
  21: makebutton("Button1", gridbag, c);<br>  
  22: makebutton("Button2", gridbag, c);<br>  
  23: makebutton("Button3", gridbag, c);<br>  
  24: c.gridwidth = GridBagConstraints.REMAINDER; //本行结束<br>  
  25: makebutton("Button4", gridbag, c);<br>  
  26: c.weightx = 0.0; //恢复初始设置<br>  
  27: makebutton("Button5", gridbag, c); //另一行<br>  
  28: c.gridwidth = 1;<br>  
  29: makebutton("Button5a", gridbag, c);<br>  
  30: c.gridwidth = GridBagConstraints.RELATIVE; //除了最后一个以外的网格<br>  
  31: makebutton("Button6", gridbag, c);<br>  
  32: c.gridwidth = GridBagConstraints.REMAINDER; //本行结束<br>  
  33: makebutton("Button7", gridbag, c);<br>  
  34: c.gridwidth = 1; //恢复初始设置<br>  
  35: c.gridheight = 2;<br>  
  36: c.weighty = 1.0;<br>  
  37: makebutton("Button8", gridbag, c);<br>  
  38: c.weighty = 0.0; //恢复初始设置<br>  
  39: c.gridwidth = GridBagConstraints.REMAINDER; //end row<br>  
  40: c.gridheight = 1; //恢复初始设置<br>  
  41: makebutton("Button9", gridbag, c);<br>  
  42: makebutton("Button10", gridbag, c);<br>  
  43: resize(300, 125);<br>  
  44: }<br>  
  45: <br>  
  46: public static void main(String args[]) {Frame f = new Frame("GridBagLayout 
  <br>  
  47: Example");<br>  
  48: check ex1 = new check();<br>  
  49: ex1.init();<br>  
  50: f.add("Center", ex1);<br>  
  51: f.pack();<br>  
  52: f.resize(f.preferredSize());<br>  
  53: f.show();<br>  
  54: }<br>  
  55: }<br>  
  <br>  
  图5-11是执行后的结果。</p>
<p>  <IMG height=262 
src="tu5-11.gif" width=400></p>
<p>  图5-11 GridBagLayout<br>  
  4. BorderLayout<br>  
  BorderLayout又与FlowLayout和GridLayout不同,它使用地理上的方向North,South,West,East和Center来确定构件添加的位置。其中前四个方向占据屏幕的四边,而Center方向占据剩下的空白。这种版面一般用于在给自己定义的Panel添加边框。下面是一个例子。</p>
<p>  <IMG 
height=262 src="tu5-12.gif" width=400></p>
<p>  图5-12 BorderLayout<br>  
  setLayout( new BorderLayout());<br>  
  add(*North*, new Button(*one*));<br>  
  add(*South*, new Button(*three*));<br>  
  add(*West*, new Button(*two*));<br>  
  add(*East*, new Button(*four*));<br>  
  add(*Center*, new Button(*five*));<br>  
  图5-12是执行后的结果<br>  
  BorderLayout中也可设置间隔,设置方法如下。<br>  
  setLayout (new BorderLayout(5,5));<br>  
  5. CardLayout<br>  
  CardLayout将每个构件看作一张卡片,在一个包容器中可以加入多个卡片,但每次只有一个是可见的。使用first(),last(),next(),previous()和show()方法均可使卡片成为可见的。下面是一个简单的例子。<br>  
  setLayout( new CardLayout());<br>  
  Panel one = new Panel();<br>  
  add(*first*, one);<br>  
  Panel two = new Panel();<br>  
  add(*Second*, two);<br>  
  Panel three = new Panel();<br>  
  add(*third*, three);<br>  
  show(this, *second*);<br>  
  在CardLayout中也可设置间隔,方法如下<br>  
  setLayout( new CardLayout(5,5));<br>  
  6. insets<br>  
  在某些情况下需要设置嵌板与屏幕之间的间隔,这时可以使用insets类。它的使用方法是:<br>  
  new Insets(5, 5, 5, 5);<br>  
  四个参数分别表示上,左,下,右的间隔,单位是像素。<br>  
  7. 嵌套使用(nested Panel)<br>  
  在介绍了这些版面之后,如何才能安排出令人满意的效果呢?在上一小节的开始,就已提到,在Java中构件是可以嵌套使用的。因此我们可以把一系列的嵌板(Panel)添加到屏幕上,在每个嵌板内部可以设置成不同的版面,添加不同的构件,这样就可以得到较好的效果。<br>  
  1: import java.awt.*;<br>  
  2:<br>  
  3: public class ui extends java.applet.Applet {<br>  
  4:<br>  
  5: public void init() {<br>  
  6: setBackground(Color.white);<br>  
  7: draw();<br>  
  8: }<br>  
  9:<br>  
  10: public void draw() {<br>  
  11:<br>  
  12: setLayout(new FlowLayout(FlowLayout.LEFT));<br>  
  13: Panel p1 = new Panel();<br>  
  14: add(p1);<br>  
  15: p1.add(new Label("Your name: "));<br>  
  16: p1.add(new TextField(30));<br>  
  17: Panel p2 = new Panel();<br>  
  18: add(p2);<br>  
  19: p2.add(new Label("Sex: "));<br>  
  20: CheckboxGroup cbg = new CheckboxGroup();<br>  
  21: p2.add(new Checkbox("Male ", cbg, true));<br>  
  22: p2.add(new Checkbox("Female ", cbg, false));<br>  
  23: Panel p3 = new Panel();<br>  
  24: add(p3);<br>  
  25: p3.add(new Label("What are you like: "));<br>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -