·一般性设置控件位置和大小:使用.setBounds(int,int,int,int)设置控件坐标大小.但必须加.setLayout(null); ·控件被添加的先后顺续决定控件是否可见.即:窗口按层来显示控件./*先添加的控件放在第一层后添加的放在后一层.*/假如先添加的控件大小大于后添加的并两控件处于同一位置则先添加的控件覆盖后添加的.因此假如想然所有控件都可见则需将在同一位置的两控件择面积小的先添加而后才是面积大的. ·固定座标(根据绝对座标对控件定位称为绝对定位)的问题:标签内的字符串可能被翻译成另一种语言,或者用户可能调整了窗口的大小。在两种情况下,按钮都会保持固定在它们最初的位置 ·使用固定座标的优点:自由设置控件位置大小. ·使用固定座标的缺点:窗口改变时许多控件无法显示.字体变化后按钮标签等控件无法显示其全部内容. ·pack()的使用:Window 组件提供 pack() 方法来解决这个问题。当向窗口发送 pack() 时,窗口会调整自身大小,从而提供足够的空间来显示其框架中包含的所有控件。设计 GUI 屏幕时,总是指定固定的大小是危险的。此外,控件的位置不应该以 x 和 y 或宽度和高度的形式表示。每个控件包含动态计算首选大小的方法,应该使用这些方法来给您的 GUI 带来最大的流动性。 ·计算控件大小的方法: 按钮 显示当前标签文本 setLabel(String)或 setText(String) 文本 显示很多字符 setColumns(int) 标签 显示标签的文本 setLabel(String)或 setText(String) 文本域 显示很多字符的行和列 setRows(int)和 setColumns(int) (一)例:使用.setBounds(int,int,int,int)设置控件坐标大小.必须加.setLayout(null); import Java.awt.*; import java.awt.event.*; public class hh { Frame frame; Button a,b; public void go() { frame = new Frame(); frame.setBounds(100,100,150,70); frame.setBackground(Color.red); frame.setLayout(null);//必须加 a=new Button("a"); b=new Button("b"); frame.add(a); a.setBounds(10,30,50,25); frame.add(b); b.setBounds(70,30,100,28); frame.setSize(200,500); frame.setVisible(true); } public static void main(String kio[]) { hh nu=new hh(); nu.go(); } } (1)结果:正常的按照上述所要求的制做了确定控件坐标和大小的窗口. (2)错误: ~1:使用.setBounds(int,int,int,int)设置控件坐标大小时必须加.setLayout(null); 按钮b占了全窗口按钮a正常. frame.setLayout(null); (二)例:添加Panel并设置.同时测试先后?渠汵????o??顺次带来的控件覆盖. import java.awt.*; import java.awt.event.*; public class hh { Frame frame; Button a,b; Panel c;//添加一面板 public void go() { frame = new Frame(); frame.setBounds(100,100,150,70); frame.setBackground(Color.red); frame.setLayout(null); a=new Button("a"); b=new Button("b"); c=new Panel(); c.setBounds(70,30,100,500);//设其位置大小 c.setBackground(Color.blue); frame.add(a); a.setBounds(10,30,50,25); frame.add(b); frame.add(c);//在b后添加它 b.setBounds(70,30,100,28); frame.setSize(200,500); frame.setVisible(true); } public static void main(String kio[]) { hh nu=new hh(); nu.go(); } } (1)结果:控件全部显示.假如将frame.add(c);置于frame.add(b);之前则c面板无法查看. (2)表明:控件被添加的先后顺续决定控件是否可见.即:窗口按层来显示控件.先添加的控件放在第一层后添加的放在后一层.假如先添加的控件大小大于后添加的并两控件处于同一位置则先添加的控件覆盖后添加的.因此假如想然所有控件都可见则需将在同一位置的两控件择面积小的先添加而后才是面积大的. (三)例:窗口使用pack()调整自身大小 import java.awt.*; import java.awt.event.*; public class hh { Frame frame; Button a,b; public void go() { frame = new Frame(); frame.setLayout(new FlowLayout()); a=new Button("l"); b=new Button("okokkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"); frame.add(a); frame.add(b); frame.pack(); //缺少frame.setSize(200,500); frame.setVisible(true); } public static void main(String kio[]) { hh nu=new hh(); nu.go(); } } (1)结果:窗口自动调节并显示出所有控件. (2)表明:Window 组件提供 pack() 方法来解决这个问题。当向窗口发送 pack() 时,窗口会调整自身大小,从而提供足够的空间来显示其框架中包含的所有控件。设计 GUI 屏幕时,总是指定固定的大小是危险的。此外,控件的位置不应该以 x 和 y 或宽度和高度的形式表示。每个控件包含动态计算首选大小的方法,应该使用这些方法来给您的 GUI 带来最大的流动性。 (四)例:使用setColumns(int)设置组件大小 import java.awt.*; import java.awt.event.*; public class hh { Frame frame; TextField txt; public void go() { frame = new Frame(); frame.setLayout(new FlowLayout()); txt=new TextField(); txt.setColumns(20); frame.add(txt); frame.pack(); frame.setVisible(true); } public static void main(String kio[]) { hh nu=new hh(); nu.go(); } }
|