Java布局管理器使用方法
程序员文章站
2023-12-12 13:20:04
很多初学者在用java布局器自动布局画界面时,经常遇见不知道如何定义区域大小或按钮之间的距离等问题。我写过一篇《实现java手动布局中各个组件能随窗口变化的方法》的文章,有...
很多初学者在用java布局器自动布局画界面时,经常遇见不知道如何定义区域大小或按钮之间的距离等问题。我写过一篇《实现java手动布局中各个组件能随窗口变化的方法》的文章,有读者反映算坐标不好算,问能不能用布局器实现文章中的界面。其实自动布局也可以解决定义区域大小或按钮之间的距离等问题,只是没有手动布局那么灵活。下面我就举一个例子。
首先,建一个frame文件(application应用程序),在design中将this中的layout设置为borderlayout。
第二,在组件盘内点选swing container页签,选取jpanel图标,在this中上方拖拽一块区域,布局器会自动调整位置与大小;同样的方法在中下方也拖拽一块区域;在swing container页签,选取jscrollpane图标,将jscrollpane在中间拖拽一块区域。拖拽的顺序一定要先上后下再中间。为了方便区分,在properties的background中,将上方的jpanel1区域设置为红色,下方的jpanel2区域设置为橙色,中间的jscrollpane1为粉红色。将jpanel1和jpanel2的layout设置为flowlayout(必须要手动设置,不要采用默认值)。
第三,在jpanel中放入一个jlable标题栏,jtextfield1文本框和jbutton按钮,在组件盘内点选swing 页签,选取jlable图标在jpanel1的中画一个标题栏,将text改为“请输入查询条件”,再选取jtextfield在jpanel1中画一个文本框,将text改为空,最后选取jbutton在jpanel1中再画一个按钮将text改为“查询”。画完后他们都是在中间,而且大小固定,这时点选jpanel的flowlayout1将右边properties中的alignment设置为left,这时jpanel1中的组键就会向左排列。选中其中一个组键,在properties中的preferredsize可以设置组键的宽和高。同样的方法在jpanel2中画三个jbutton按钮,将text分别设为“增加”、“删除”、“修改”。点选jpane2的flowlayout2将右边properties中的hgap设置为30(按钮的间距,可根据自己的需要调整数值大小), 这样就调整了三个按钮之间的距离,设置vgap还可以改变jpane2区域的高度。
第四,在jscrollpane1中建一个表格用来显示数据库数据的内容,在组件盘内点选swing 页签,选取jtable图标,将jtable加入到jscrollpane1中。
最后,将this中的defaultcloseoperation改为exit_on_close,这样在关闭窗口时程序会自动退出。
程序源代码如下(除中文注释部分的两句是自己加上去,其余是自动生成):
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.vector;
import javax.swing.table.defaulttablemodel;
public class frame1
extends jframe {
borderlayout borderlayout1 = new borderlayout();
jpanel jpanel1 = new jpanel();
jpanel jpanel2 = new jpanel();
jpanel jpanel3 = new jpanel();
jlabel jlabel1 = new jlabel();
jtextfield jtextfield1 = new jtextfield();
jbutton jbutton1 = new jbutton();
flowlayout flowlayout1 = new flowlayout();
flowlayout flowlayout2 = new flowlayout();
jbutton jbutton2 = new jbutton();
jbutton jbutton3 = new jbutton();
jbutton jbutton4 = new jbutton();
gridlayout gridlayout1 = new gridlayout();
jscrollpane jscrollpane1 = new jscrollpane();
jtable jtable1 = new jtable();
public frame1() {
try {
jbinit();
}
catch (exception e) {
e.printstacktrace();
}
}
public static void main(string[] args) {
frame1 frame1 = new frame1();
frame1.setsize(new dimension(400, 350));
frame1.show();
}
private void jbinit() throws exception {
this.getcontentpane().setlayout(borderlayout1);
jpanel1.setbackground(color.red);
jpanel1.setlayout(flowlayout1);
jpanel2.setbackground(color.red);
jpanel2.setlayout(flowlayout2);
jpanel3.setbackground(color.pink);
jpanel3.setlayout(gridlayout1);
jlabel1.setpreferredsize(new dimension(100, 16));
jlabel1.settext("请输入查询条件");
jtextfield1.setpreferredsize(new dimension(140, 22));
jtextfield1.settext("");
jbutton1.settext("查询");
jbutton1.addactionlistener(new frame1_jbutton1_actionadapter(this));
flowlayout1.setalignment(flowlayout.left);
flowlayout1.sethgap(5);
flowlayout1.setvgap(10);
jbutton2.settext("增加");
jbutton3.settext("删除");
jbutton4.settext("修改");
flowlayout2.sethgap(30);
flowlayout2.setvgap(5);
this.setdefaultcloseoperation(exit_on_close);
this.getcontentpane().add(jpanel1, borderlayout.north);
jpanel1.add(jlabel1, null);
jpanel1.add(jtextfield1, null);
jpanel1.add(jbutton1, null);
this.getcontentpane().add(jpanel2, borderlayout.south);
jpanel2.add(jbutton2, null);
jpanel2.add(jbutton3, null);
jpanel2.add(jbutton4, null);
this.getcontentpane().add(jpanel3, borderlayout.center);
jpanel3.add(jscrollpane1, null);
jscrollpane1.getviewport().add(jtable1, null);
}
//模拟查询数据库
void jbutton1_actionperformed(actionevent e) {
try { //制作表
vector vcol = new vector(); //列名
vector vrow = new vector(); //内容
for (int col = 1; col < 31; col++) {
vcol.addelement("列" + col);
}
for (int row = 1; row < 101; row++) {
vector vr1 = new vector();
for (int col = 1; col < 31; col++) {
vr1.addelement(row + "/" + col);
}
vrow.addelement(vr1);
}
defaulttablemodel dtm = new defaulttablemodel(vrow, vcol);
jtable1 = new jtable(vrow, vcol);
jtable1.setautoresizemode(jtable.auto_resize_off); //滚动条设置左右滚
this.jscrollpane1.getviewport().add(jtable1, null); //在滚动条中放入表
}
catch (exception ex) {
joptionpane.showmessagedialog(null, ex);
}
}
}
class frame1_jbutton1_actionadapter
implements java.awt.event.actionlistener {
frame1 adaptee;
frame1_jbutton1_actionadapter(frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionperformed(actionevent e) {
adaptee.jbutton1_actionperformed(e);
}
}
首先,建一个frame文件(application应用程序),在design中将this中的layout设置为borderlayout。
第二,在组件盘内点选swing container页签,选取jpanel图标,在this中上方拖拽一块区域,布局器会自动调整位置与大小;同样的方法在中下方也拖拽一块区域;在swing container页签,选取jscrollpane图标,将jscrollpane在中间拖拽一块区域。拖拽的顺序一定要先上后下再中间。为了方便区分,在properties的background中,将上方的jpanel1区域设置为红色,下方的jpanel2区域设置为橙色,中间的jscrollpane1为粉红色。将jpanel1和jpanel2的layout设置为flowlayout(必须要手动设置,不要采用默认值)。
第三,在jpanel中放入一个jlable标题栏,jtextfield1文本框和jbutton按钮,在组件盘内点选swing 页签,选取jlable图标在jpanel1的中画一个标题栏,将text改为“请输入查询条件”,再选取jtextfield在jpanel1中画一个文本框,将text改为空,最后选取jbutton在jpanel1中再画一个按钮将text改为“查询”。画完后他们都是在中间,而且大小固定,这时点选jpanel的flowlayout1将右边properties中的alignment设置为left,这时jpanel1中的组键就会向左排列。选中其中一个组键,在properties中的preferredsize可以设置组键的宽和高。同样的方法在jpanel2中画三个jbutton按钮,将text分别设为“增加”、“删除”、“修改”。点选jpane2的flowlayout2将右边properties中的hgap设置为30(按钮的间距,可根据自己的需要调整数值大小), 这样就调整了三个按钮之间的距离,设置vgap还可以改变jpane2区域的高度。
第四,在jscrollpane1中建一个表格用来显示数据库数据的内容,在组件盘内点选swing 页签,选取jtable图标,将jtable加入到jscrollpane1中。
最后,将this中的defaultcloseoperation改为exit_on_close,这样在关闭窗口时程序会自动退出。
程序源代码如下(除中文注释部分的两句是自己加上去,其余是自动生成):
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.vector;
import javax.swing.table.defaulttablemodel;
public class frame1
extends jframe {
borderlayout borderlayout1 = new borderlayout();
jpanel jpanel1 = new jpanel();
jpanel jpanel2 = new jpanel();
jpanel jpanel3 = new jpanel();
jlabel jlabel1 = new jlabel();
jtextfield jtextfield1 = new jtextfield();
jbutton jbutton1 = new jbutton();
flowlayout flowlayout1 = new flowlayout();
flowlayout flowlayout2 = new flowlayout();
jbutton jbutton2 = new jbutton();
jbutton jbutton3 = new jbutton();
jbutton jbutton4 = new jbutton();
gridlayout gridlayout1 = new gridlayout();
jscrollpane jscrollpane1 = new jscrollpane();
jtable jtable1 = new jtable();
public frame1() {
try {
jbinit();
}
catch (exception e) {
e.printstacktrace();
}
}
public static void main(string[] args) {
frame1 frame1 = new frame1();
frame1.setsize(new dimension(400, 350));
frame1.show();
}
private void jbinit() throws exception {
this.getcontentpane().setlayout(borderlayout1);
jpanel1.setbackground(color.red);
jpanel1.setlayout(flowlayout1);
jpanel2.setbackground(color.red);
jpanel2.setlayout(flowlayout2);
jpanel3.setbackground(color.pink);
jpanel3.setlayout(gridlayout1);
jlabel1.setpreferredsize(new dimension(100, 16));
jlabel1.settext("请输入查询条件");
jtextfield1.setpreferredsize(new dimension(140, 22));
jtextfield1.settext("");
jbutton1.settext("查询");
jbutton1.addactionlistener(new frame1_jbutton1_actionadapter(this));
flowlayout1.setalignment(flowlayout.left);
flowlayout1.sethgap(5);
flowlayout1.setvgap(10);
jbutton2.settext("增加");
jbutton3.settext("删除");
jbutton4.settext("修改");
flowlayout2.sethgap(30);
flowlayout2.setvgap(5);
this.setdefaultcloseoperation(exit_on_close);
this.getcontentpane().add(jpanel1, borderlayout.north);
jpanel1.add(jlabel1, null);
jpanel1.add(jtextfield1, null);
jpanel1.add(jbutton1, null);
this.getcontentpane().add(jpanel2, borderlayout.south);
jpanel2.add(jbutton2, null);
jpanel2.add(jbutton3, null);
jpanel2.add(jbutton4, null);
this.getcontentpane().add(jpanel3, borderlayout.center);
jpanel3.add(jscrollpane1, null);
jscrollpane1.getviewport().add(jtable1, null);
}
//模拟查询数据库
void jbutton1_actionperformed(actionevent e) {
try { //制作表
vector vcol = new vector(); //列名
vector vrow = new vector(); //内容
for (int col = 1; col < 31; col++) {
vcol.addelement("列" + col);
}
for (int row = 1; row < 101; row++) {
vector vr1 = new vector();
for (int col = 1; col < 31; col++) {
vr1.addelement(row + "/" + col);
}
vrow.addelement(vr1);
}
defaulttablemodel dtm = new defaulttablemodel(vrow, vcol);
jtable1 = new jtable(vrow, vcol);
jtable1.setautoresizemode(jtable.auto_resize_off); //滚动条设置左右滚
this.jscrollpane1.getviewport().add(jtable1, null); //在滚动条中放入表
}
catch (exception ex) {
joptionpane.showmessagedialog(null, ex);
}
}
}
class frame1_jbutton1_actionadapter
implements java.awt.event.actionlistener {
frame1 adaptee;
frame1_jbutton1_actionadapter(frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionperformed(actionevent e) {
adaptee.jbutton1_actionperformed(e);
}
}