欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java Swing组件BoxLayout布局用法示例

程序员文章站 2024-04-01 20:53:16
本文实例讲述了java swing组件boxlayout布局用法。分享给大家供大家参考,具体如下: boxlayout 可以把控件依次进行水平或者垂直排列布局,这是通过参...

本文实例讲述了java swing组件boxlayout布局用法。分享给大家供大家参考,具体如下:

boxlayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 x_axis、y_axis 来决定的。x_axis 表示水平排列,而 y_axis 表示垂直排列。boxlayout 的构造函数有两个参数,一个参数定义使用该 boxlayout 的容器,另一个参数是指定 boxlayout 是采用水平还是垂直排列。下面是一个使用 boxlayout排列控件的例子:

jpanel panel=new jpanel();
boxlayout layout=new boxlayout(panel, boxlayout.x_axis);
panel.setlayout(layoout);
panel.add(new jbutton("hello"));
panel.add(new jbutton("wolrd"));

在实际应用中,为了在控件直接添加间隔,我们常常需要分隔器,它有以下几种类型:

① rigid area 是一种用户可以定义水平和垂直尺寸的透明组件;
② strut 与 rigid area 类似,但是用户只能定义一个方向的尺寸,即水平方向或者垂直方向,不能同时定义水平和垂直尺寸;
③ glue位于两个控件之间时,它会尽可能的占据两个控件之间的多余空间,从而将两个控件挤到两边;
④ filler 是 box 的内部类,它与 rigid area 相似,都可以指定水平或者垂直的尺寸,但是它可以设置最小,最大和优先尺寸。

下面是一个测试用例:

boxlayoutdemo.java

package awtdemo;
import java.awt.dimension;
import javax.swing.borderfactory;
import javax.swing.box;
import javax.swing.boxlayout;
import javax.swing.defaultlistmodel;
import javax.swing.jbutton;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.jlist;
import javax.swing.jpanel;
import javax.swing.jscrollpane;
import javax.swing.listselectionmodel;
@suppresswarnings("serial")
public class boxlayoutdemo extends jpanel {
  jpanel sportpanel;
  jpanel querypanel;
  jpanel middlepanel;
  public boxlayoutdemo() {
    // 主面板由3个子面板组成,在水平方向排列
    setlayout(new boxlayout(this, boxlayout.x_axis));
    this.setsportpanel();
    this.setmiddlepanel();
    this.setquerypanel();
    this.add(sportpanel);
    this.add(middlepanel);
    this.add(querypanel);
  }
  private void setsportpanel() {
    system.out.println("setsportpanel called");
    //本函数内包含以下两个控件
    jlabel sourcelabel;//文字标签
    jscrollpane sourcelistscroller;//滚动条
    //文字标签
    sourcelabel = new jlabel("运动项目");
    sourcelabel.setalignmenty(top_alignment);
    sourcelabel.setborder(borderfactory.createemptyborder(4, 5, 0, 5));
    // 创建一个列表,包含运动项目
    defaultlistmodel<string> listmodel = new defaultlistmodel<string>();
    listmodel.addelement("100米");
    listmodel.addelement("200米");
    listmodel.addelement("400米");
    listmodel.addelement("跳远");
    listmodel.addelement("跳高");
    listmodel.addelement("铅球");
    jlist<string> sourcelist = new jlist<string>(listmodel);
    sourcelist
        .setselectionmode(listselectionmodel.multiple_interval_selection);
    sourcelist.setvisiblerowcount(5);//初始状态保持5行可见
    //滚动条
    sourcelistscroller = new jscrollpane(sourcelist);
    sourcelistscroller
        .setverticalscrollbarpolicy(jscrollpane.vertical_scrollbar_always);
    sourcelistscroller.setalignmenty(top_alignment);
    //开始布局主面板
    sportpanel = new jpanel();
    sportpanel.setlayout(new boxlayout(sportpanel, boxlayout.y_axis));// 垂直布局
    sportpanel.setborder(borderfactory.createbevelborder(1));
    sportpanel.add(sourcelabel);// 加入文字标签到
    sportpanel.add(sourcelistscroller);// 加入运动项目列表
  }
  private void setmiddlepanel() {
    //本函数包含2个按钮
    jbutton totargetbutton = new jbutton(">>");
    jbutton tosourcebutton = new jbutton("<<");
    //布局主面板
    middlepanel = new jpanel();
    middlepanel.setborder(borderfactory.createbevelborder(1));
    middlepanel.setlayout(new boxlayout(middlepanel, boxlayout.y_axis));//主面板为垂直布局
    middlepanel.add(totargetbutton);// 添加第一个按钮>>
    middlepanel.add(box.createrigidarea(new dimension(15, 15)));// 中间添加一个看不见的rigidarea
    middlepanel.add(tosourcebutton);// 添加第二个按钮<<
  }
  private void setquerypanel() {
    //本函数包含2个控件
    jlabel targetlabel;
    jscrollpane targetlistscroller;
    // 文字标签
    targetlabel = new jlabel("查询项目");
    targetlabel.setalignmenty(top_alignment);
    targetlabel.setborder(borderfactory.createemptyborder(4, 5, 0, 5));
    // 创建列表查询项目
    defaultlistmodel<string> targetlistmodel = new defaultlistmodel<string>();
    targetlistmodel.addelement("100米");
    jlist<string> targetlist = new jlist<string>(targetlistmodel);
    targetlist
        .setselectionmode(listselectionmodel.multiple_interval_selection);
    //滚动条
    targetlistscroller = new jscrollpane(targetlist);
    targetlistscroller
        .setverticalscrollbarpolicy(jscrollpane.vertical_scrollbar_always);
    targetlistscroller.setalignmenty(top_alignment);
    //设置主面板布局
    querypanel = new jpanel();
    querypanel.setlayout(new boxlayout(querypanel, boxlayout.y_axis));// 垂直布局
    querypanel.setborder(borderfactory.createbevelborder(1));
    querypanel.add(targetlabel);//添加文字标签
    querypanel.add(targetlistscroller);//添加滚动条
  }
  public static void main(string[] args) {
    jframe frame = new jframe("boxlayoutdemo - www.jb51.net");
    frame.setdefaultcloseoperation(jframe.exit_on_close);
    frame.setcontentpane(new boxlayoutdemo());
    frame.pack();
    // frame.repaint();
    frame.setlocationrelativeto(null);
    frame.setvisible(true);
  }
}

运行效果图:

Java Swing组件BoxLayout布局用法示例

更多关于java相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java字符与字符串操作技巧总结》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。