总结几种常用的GUI布局

 我来答
梦风儿1205
2013-11-04 · 超过65用户采纳过TA的回答
知道答主
回答量:206
采纳率:66%
帮助的人:57.9万
展开全部
(2)使用指定的布局方式:创建指定布局方式类的对象,然后调用容器类的setLayout()方法来指定所需的布局方式。例:setLayout(new FlowLayout());ps:一般Java中默认采用相对定位布局,如需要使用绝对定位布局,则应该取消容器的布局方式(setLayout(null)),然后使用 setLocation() setSize() setBounds()设置组件的大小及位置。(3)下面分别对几种布局方式的编程加以说明。先说课本上出现的:1、Flowlayout默认为从上到下从左到右依次摆放,每行均居中,自动换行,也可设置对齐方式,它是Panel、Applet的缺省布局。 组件顺序和尺寸不随窗口变化而变化。 2、BorderLayout将容器内的空间划分为东、南、西、北、中五个方位,并指明组件所在的方位,它是Window、Dialog、Frame的缺省布局方式。 north与south有确定的高度,west与east有确定的宽度。 3、GridLayout行列网格状布局。这种布局方式首先放一个容纳单元的栅格,元件放到这个网格的单元个中,GridLayout构造方法: GridLayout(int row,int col)GridLayout(int row,int col,int hGap,int vGap) 其中:row:行数 col: 列数 如果某个值为零,表示这个方向可以任意扩展。 HGap、vGap表示以象素为单位的元件间隔。 元件总是充满单元格,而且随着边框的变化而变化。 补充几个课外的:4、CardLayout卡片叠式布局。这种布局方式,可以用来管理两个或者更多共享同一显示区域的元件。它具有以下两个构造方法: CardLayout()CardLayout(int hGap,int vGap) 样例: package demo; import java.awt.*;import java.awt.event.*;import java.*;import java.lang.*; public class GuiDemo extends Frame { //构造一个容器,放置可变的元件 Panel cardContainer=new Panel(); //构造函数的参数为长度 TextField jTextField1 = new TextField(30); Button jButton1 = new Button(); Button jButton2 = new Button(); Button jButton3 = new Button(); //列表框 Choice c=new Choice(); String ca1="按钮"; String ca2="正文域"; //构造函数 public GuiDemo() { jbInit(); } //开始代码 public static void main(String[] args) { GuiDemo frame = new GuiDemo(); //显示元件 frame.setVisible(true); } //初始化代码,这里踢出了错误 private void jbInit() { //激活Windows事件 enableEvents(AWTEvent.WINDOW_EVENT_MASK); //设置窗口的标题,大小与布局 setTitle("元件加入的程序演示"); setSize(new Dimension(300, 200)); //所有的元件都按顺序方式布局 this.setLayout(new BorderLayout(0,3)); jTextField1.setText("您好"); jButton1.setLabel("按钮1-1"); jButton2.setLabel("按钮1-2"); jButton3.setLabel("按钮1-3"); //列表框赋初值 c.add(ca1); c.add(ca2); //构造下拉列表改变的事件侦听器 c.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(ItemEvent e) {myItem(e);} } ); //构造一个容器放列表框 Panel globarPanel=new Panel(); globarPanel.add(c); this.add("North",globarPanel); //cardContainer按CardLayout布局 cardContainer.setLayout(new CardLayout()); Panel p1=new Panel(); p1.add(jButton1); p1.add(jButton2); p1.add(jButton3); Panel p2=new Panel(); p2.add(jTextField1); //把两个容器都加入 cardContainer.add(ca1,p1); cardContainer.add(ca2,p2); this.add("Center",cardContainer); } //这是下拉列表改变的事件程序 void myItem(ItemEvent e) { ((CardLayout)cardContainer.getLayout()).show( cardContainer,(String)e.getItem()); } //这是检测退出程序的的事件,没有这个事件窗口将无法关闭 protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } }} 5、GridBayLayout自定义网格状布局。 看起来有很多约束需要进行设置,但事实上许多约束只需设置一次,并对多个组件重用,每次添加组件时只有少数的项需要修改.常用构造: public GridBagLayout() 样例: package demo; import java.awt.*;import java.awt.event.*;import java.*;import java.lang.*; public class GuiDemo extends Frame { //构造函数 public GuiDemo() { jbInit(); } //开始代码 public static void main(String[] args) { GuiDemo frame = new GuiDemo(); frame.setTitle("元件加入的程序演示"); frame.setSize(300,200); //显示元件 frame.setVisible(true); } public void makebutton( String name, GridBagLayout gridbag, GridBagConstraints c) { Button button=new Button(name); gridbag.setConstraints(button,c); this.add(button); } //初始化代码 private void jbInit() { //激活Windows事件 enableEvents(AWTEvent.WINDOW_EVENT_MASK); GridBagLayout gridbag=new GridBagLayout(); GridBagConstraints c=new GridBagConstraints(); this.setFont(new Font("宋体",Font.PLAIN,11)); this.setLayout(gridbag); c.fill=GridBagConstraints.BOTH; c.weightx=1.0; makebutton("Bt1",gridbag,c); makebutton("Bt2",gridbag,c); makebutton("Bt3",gridbag,c); c.gridwidth=GridBagConstraints.REMAINDER; makebutton("Bt4",gridbag,c); c.weightx=0.0; makebutton("Bt5",gridbag,c); c.gridwidth=GridBagConstraints.RELATIVE; makebutton("Bt6",gridbag,c); c.gridwidth=GridBagConstraints.REMAINDER; makebutton("Bt7",gridbag,c); c.gridwidth=1; c.gridheight=2; c.weighty=1.0; makebutton("Bt8",gridbag,c); c.weighty=0.0; c.gridwidth=GridBagConstraints.REMAINDER; c.gridheight=1; makebutton("Bt9",gridbag,c); makebutton("Bt10",gridbag,c); } //这是检测退出程序的的事件,没有这个事件窗口将无法关闭 protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } }} (凌霄)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式