首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Merlin 新布局管理器:SpringLayout 彈性佈局實戰

     編輯:Java 相關知識

SpringLayout 核心概念

Java 1.4 引入 SpringLayout,允許將「彈簧」附加到組件,使組件相對於其他組件或容器邊界佈局。例如按鈕始終依附右邊框,無論視窗寬度如何變化。

基本使用:Constraints 與 Spring

SpringLayout 透過 SpringLayout.Constraints 對象控制組件四邊(EAST, WEST, NORTH, SOUTH)。每條邊關聯一個 Spring 對象。可先添加組件再單獨設置約束。範例將標籤置於容器左上偏移 (5,25):

Component left = new JLabel("Left");
SpringLayout layout = new SpringLayout();
JPanel panel = new JPanel(layout);
Spring xPad = Spring.constant(5);
Spring yPad = Spring.constant(25);
SpringLayout.Constraints c = new SpringLayout.Constraints();
c.setConstraint(SpringLayout.WEST, xPad);
c.setConstraint(SpringLayout.NORTH, yPad);
contentPane.add(left, c);

相對佈局:獲取鄰近組件邊界

添加第二個組件需參考第一個組件邊界。用 layout.getConstraint(SpringLayout.EAST, left) 獲取左組件右邊位置,加上間距作為右組件左邊:

Component right = new JTextField(15);
Spring rightSideOfLeft = layout.getConstraint(SpringLayout.EAST, left);
Spring pad = Spring.constant(20);
Spring leftEdgeOfRight = Spring.sum(rightSideOfLeft, pad);
c = new SpringLayout.Constraints();
c.setConstraint(SpringLayout.WEST, leftEdgeOfRight);
c.setConstraint(SpringLayout.NORTH, yPad);
contentPane.add(right, c);

簡化 API:putConstraint()

組件多時上述方式繁瑣。putConstraint() 允許先加組件再統一設置約束,自動處理邊界計算與間距:

layout.putConstraint(SpringLayout.WEST, left, 5, SpringLayout.WEST, panel);
layout.putConstraint(SpringLayout.NORTH, left, 25, SpringLayout.NORTH, panel);
layout.putConstraint(SpringLayout.NORTH, right, 25, SpringLayout.NORTH, panel);
layout.putConstraint(SpringLayout.WEST, right, 20, SpringLayout.EAST, left);

參數:目標組件邊界、目標組件、間距(int 或 Spring)、參考組件邊界、參考組件。需確保參考組件位置可計算或固定(如容器邊界)。

BeanBuilder 可視化工具

Sun 提供 BeanBuilder 工具輔助 SpringLayout 設計。組件四邊各有小方框,拖曳連線即可生成 putConstraint() 代碼。圖示展示啟動畫面與設計畫面。

BeanBuilder 啟動畫面 BeanBuilder 設計畫面

完整範例:SpringFormTest

import java.awt.*;
import javax.swing.*;
public class SpringFormTest {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Spring Form");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = frame.getContentPane();
    SpringLayout layout = new SpringLayout();
    contentPane.setLayout(layout);
    Component left = new JLabel("Left");
    Component right = new JTextField(15);
    contentPane.add(left);
    contentPane.add(right);
    layout.putConstraint(SpringLayout.WEST, left, 10, SpringLayout.WEST, contentPane);
    layout.putConstraint(SpringLayout.NORTH, left, 25, SpringLayout.NORTH, contentPane);
    layout.putConstraint(SpringLayout.NORTH, right, 25, SpringLayout.NORTH, contentPane);
    layout.putConstraint(SpringLayout.WEST, right, 20, SpringLayout.EAST, left);
    frame.setSize(300, 100);
    frame.show();
  }
}

執行結果畫面

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved