布局就是各個元件在視窗中的位置,或為相對位置或為絕對位置。在介面程式設計中是必要的。
1、簡介
把swing
的各種元件(jcomponent
)新增到面板容器中(jpanel
),需要給面板容器指定布局管理器(layoutmanager
),明確容器(container
)內的各個元件之間的排列布局方式。
2、箱式布局
由boxlayout
類實現的布局管理器稱為箱式布局管理器,用來管理一組水平或垂直排列的元件,如果是用來管理一組水平排列的元件,則稱為水平箱,效果如左圖所示,如果是用來管理一組垂直排列的元件,則稱為垂直箱,效果如右圖所示
swing 提供了乙個實現了 boxlayout 的容器元件box
。使用 box 提供的靜態方法,可快速建立水平/垂直箱容器(box),以及填充元件之間空隙的不可見元件。
// 建立乙個水平箱容器
box hbox = box.createhorizontalbox();
// 建立乙個垂直箱容器
box vbox = box.createverticalbox();
box 內的元件之間預設沒有空隙並居中,如果想在元件之間(或頭部/尾部)新增空隙,可以在其中新增乙個影響布局的不可見元件。
topicbox.add(box.createhorizontalstrut(5));// 新增乙個5畫素寬的水平支柱
box.add(box.createverticalstrut(5));// 新增乙個5畫素高的垂直支柱
contentbox.setalignmentx(1);// 設定元件的水平調整值,靠右側對齊
contentlabel.setalignmenty(0);// 設定元件的垂直調整值,靠上方對齊
例如將一根按鈕新增到箱式容器裡面:
jbutton submitbutton = new jbutton("確定");// 建立乙個按鈕
submitbutton.setalignmentx(1);// 設定元件的水平調整值,靠右側對齊
box.add(submitbutton);// 新增到垂直箱容器中
3、卡片布局管理器
由cardlayout
類實現的布局管理器稱為卡片布局管理器,用來操縱其所管理容器中包含的容器或元件。每個直接新增到其所管理容器中的容器或元件為乙個卡片,最先被新增到其所管理容器中的容器或元件被認為是第乙個卡片,最後被新增的則為最後乙個卡片,初次執行時將顯示第乙個卡片。
建立乙個卡片布局管理器:
cardlayout = new cardlayout();// 建立乙個卡片布局管理器物件
cardpanel = new jpanel(cardlayout);// 建立乙個採用片布局管理器的面板物件
getcontentpane().add(cardpanel, borderlayout.center);// 新增到窗體中間
卡片中新增元件
jbutton btn01 = new jbutton("button01");
panel.add(btn01, "btn01"); //btn01為乙個元件,"btn01"為卡片的名字
常用的方法:
// 顯示第一張卡片 void first(container parent);
// 顯示最後一張卡片 void last(container parent);
// 顯示下一張卡片(自動迴圈顯示) void next(container parent);
// 顯示上一張卡片(自動迴圈顯示) void previous(container parent);
// 顯示指定名稱的元件(新增元件到容器時,可同時新增元件的名稱) void show(container parent, string name);
4、網格組布局管理器 由
gridbaglayout
類實現的布局管理器稱為網格組布局管理器,它實現了乙個動態的矩形網格,這個矩形網格由無數個矩形單元格組成,每個元件可以占用乙個或多個這樣的單元格。所謂動態的矩形網格,就是可以根據實際需要隨意增減矩形網格的行數和列數。
設定為網格布局
getcontentpane().setlayout(new gridbaglayout());
新增乙個元件到乙個網格裡面,這裡例如乙個按鈕
final jbutton button = new jbutton("a");
final gridbagconstraints gridbagconstraints = new gridbagconstraints(); //布局管理器
gridbagconstraints.gridy = 0;// 起始點為第1行
gridbagconstraints.gridx = 0;// 起始點為第1列
gridbagconstraints.weightx = 10;// 第一列的分布方式為10%
gridbagconstraints.fill = gridbagconstraints.horizontal;//元件 在其 顯示區域內 的填充方式
getcontentpane().add(button, gridbagconstraints);
5、彈簧布局管理器
彈簧布局管理器以容器和元件的邊緣為操縱物件,通過為元件和容器邊緣以及元件和元件邊緣建立約束,實現對元件布局的管理,如下圖所示
// 建立彈簧布局管理器物件
springlayout springlayout = new springlayout();
container contentpane = getcontentpane();// 獲得窗體容器物件
// 將窗體容器修改為採用彈簧布局管理器
contentpane.setlayout(springlayout);
設定彈簧的距離
jlabel topiclabel = new jlabel("主題:");
contentpane.add(topiclabel);
// 主題標籤北側——>容器北側
springlayout.putconstraint(north, topiclabel, 15, north, contentpane);
// 主題標籤西側——>容器西側
springlayout.putconstraint(west, topiclabel, 5, west, contentpane);
支柱和彈簧:
spring vst = spring.constant(20);// 建立乙個支柱
spring hsp = spring.constant(20, 100, 500);// 建立乙個彈簧
jbutton lbutton = new jbutton("按鈕l");
getcontentpane().add(lbutton);
springlayout.putconstraint(north, lbutton, vst, north,getcontentpane());// 「按鈕l」北側——>容器北側
springlayout.putconstraint(west, lbutton, hsp, west,getcontentpane());// 「按鈕l」西側——>容器西側
利用彈簧控制項大小:
jbutton lbutton = new jbutton("按鈕l");
getcontentpane().add(lbutton);
spring widthsp = spring.constant(60, 300, 600);// 建立乙個彈簧
spring heightst = spring.constant(60);// 建立乙個支柱
// 獲得「按鈕l」的constraints物件
constraints lbuttoncons = springlayout.getconstraints(lbutton);
lbuttoncons.setwidth(widthsp);// 設定控制項寬度的彈簧
lbuttoncons.setheight(heightst);// 設定控制項高度的支柱
Java布局管理器setLayout
1。flowlayout public flowlayout int align,int hgap,int vgap 建立乙個新的流布局管理器,具有指定的對齊方式以及指定的水平和垂直間隙。對齊引數的值必須是以下之一 flowlayout.left flowlayout.right flowlayou...
qt之布局管理器
我們載入控制項的時候,我們可以用布局類來指定父視窗 然後widget可以直接載入布局類 qt的布局類 水平布局 qhboxlayout 垂直布局 qvboxlayout 柵格布局 qfromlayout 手動布局 常用介面 addwidget qwieget int row,int colunum,...
布局管理器 網格袋布局管理器
網格袋布局管理器中的約束條件constrains中有如下字段需要設定 1 constrains.gridx和constrains.gridy 這兩個欄位僅用於指定元件的起始網格座標。2 constrains.gridwidth和constrains.gridheight 這兩個字段用於指定元件所佔網...