当前位置: 移动技术网 > IT编程>开发语言>Java > Java Swing组件BoxLayout布局用法示例

Java Swing组件BoxLayout布局用法示例

2019年07月19日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java字符与字符串操作技巧总结》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网