5 線性佈局 & 自由位置佈局
阿新 • • 發佈:2021-01-11
技術標籤:JavaSwing基礎swing
線性佈局
線性佈局,包含水平佈局和豎直佈局兩種
以水平佈局為例
內容添加了4個子控制元件,每個控制元件的寬度佔多少?
水平佈局器 AfXLayout,水平方向上依次排列
-
對子空間進行水平方向上的佈局
-
每個子控制元件可以單獨指定寬度
- "100px" 固定佔100畫素 - "25%" 固定佔寬度的25% - "auto" 固定使用它的Preferred Size - "1w" 按權重動態分配(分配剩餘的空間,比如一個控制元件為"2w",一個控制元件為"3w",則它們將以2:3的比例瓜分剩餘空間)
程式碼:
class MyFrame extends JFrame{
ColorfulLabel a1 = new ColorfulLabel("1", Color.YELLOW);
ColorfulLabel a2 = new ColorfulLabel("2", Color.BLUE);
ColorfulLabel a3 = new ColorfulLabel("3", Color.RED);
ColorfulLabel a4 = new ColorfulLabel("4", Color.GREEN) ;
public MyFrame(String title) {
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
//設定為橫向佈局
//注:AfXLayout 與 AfRowLayout等效
root.setLayout(new AfXLayout(8));
root.add(a1, "100px");
root.add(a2, "30%");
root.add(a3, "auto");
root. add(a4, "1w");
}
private class ColorfulLabel extends JLabel{
public ColorfulLabel(String text, Color color) {
this.setText(text);
this.setOpaque(true);
this.setBackground(color);
this.setHorizontalAlignment(SwingConstants.CENTER);
}
}
}
輸出:
要點與細節:
- 提供水平/豎直佈局器,以方便後續的練習,內部實現比較複雜,不用研究
- AfXLayout 和 AfYLayout 分別與 AfRowLayout 和 AfColumnLayout 等效,後面可能會混合出現
自由位置佈局
自由位置佈局 AfAnyWhere
自由指定每一個控制元件的位置,可以為任何大小、任意位置
一般步驟:
-
建立佈局器:
panel.setLayout(new AfAnyWhere()); -
新增子控制元件時,指定AfMargin引數
-
panel.add(label, new AfMargin(-1, 15, 20 , 15));
程式碼:
public MyFrame(String title) {
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
//設為任意位置佈局
root.setLayout(new AfAnyWhere());
//左上,相當於 new AfMargin(0, 0, -1, -1)
root.add(a1, AfMargin.TOP_LEFT);
//右上,相當於 new AfMargin(0, -1, -1, 0)
root.add(a2, AfMargin.TOP_RIGHT);
//中間,相當於 new AfMargin(-1, -1, -1,- 1)
root.add(a3, AfMargin.CENTER);
//自由位置定義
root.add(a4, new AfMargin(-1, 15, 20, 15));
}
顯示: