1. 程式人生 > 其它 >5 線性佈局 & 自由位置佈局

5 線性佈局 & 自由位置佈局

技術標籤: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));
	}

顯示:
在這裡插入圖片描述