Java Swing组件BoxLayout布局用法示例
程序员文章站
2023-12-18 21:20:22
本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java字符与字符串操作技巧总结》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。