您好,登錄后才能下訂單哦!
1. 概述
官方JavaDocsApi:
SpringLayout,彈性布局管理器。使用該布局的容器內的 每一個組件或容器都對應著一個約束,通過該約束定義組件或容器四條邊的坐標位置 來實現對組件的布局。該布局主要涉及三個類: SpringLayout、SpringLayout.Constraints、Spring,分別表示 布局管理器、約束、坐標距離。
(1)SpringLayout
表示一個布局管理器,通過該布局管理器可以獲取組件或容器的約束對象,如下:
// 創建 彈性布局管理器 和 容器,容器 使用 彈性布局 SpringLayout layout = new SpringLayout(); JPanel panel = new JPanel(layout); // 創建 按鈕組件,并添加到 容器 JButton btn = new JButton("Button"); panel.add(btn); // 獲取 按鈕組件 的 約束對象(如果沒有,會自動創建) SpringLayout.Constraints btnCons = layout.getConstraints(btn); // 獲取 容器組件 的 約束對象(如果沒有,會自動創建) SpringLayout.Constraints panelCons = layout.getConstraints(panel);
(2)SpringLayout.Constraints
表示對 組件位置和尺寸的約束,每個組件實例都對應著一個約束對象,通過該約束可以 獲取和設置 組件四條邊的 坐標和寬高,常用方法如下:
/* * 組件左上角坐標的設置(這里 X 相當于 WEST,Y 相當于 NORTH) */ void setX(Spring x) void setY(Spring y) Spring getX() Spring getY() /* * 組件寬高的設置 */ void setWidth(Spring w) void setHeight(Spring h) Spring getHeight() Spring getWidth() /* * 組件指定邊的的坐標或長度設置 * edgeName 的值為如下常量之一: * SpringLayout.NORTH, SpringLayout.SOUTH, SpringLayout.EAST, SpringLayout.WEST * SpringLayout.HORIZONTAL_CENTER, SpringLayout.VERTICAL_CENTER * SpringLayout.BASELINE * SpringLayout.WIDTH, SpringLayout.HEIGHT */ Spring getConstraint(String edgeName) void setConstraint(String edgeName, Spring s)
(3)Spring
Spring 可以看做是在 SpringLayout 中對 距離的度量。一個 Spring 實例,表示一段距離或長度,并且支持簡單的算術運算(通過 Spring 提供的靜態方法進行計算),常用方法如下:
// 創建一個指定長度的 spring static Spring constant(int pref) // 兩個 spring 相加,得到新的一個 spring static Spring sum(Spring s1, Spring s2) // 計算兩個 spring 之間的較大者 static Spring max(Spring s1, Spring s2) // 對 spring 的縮放 static Spring scale(Spring s, float factor) // 計算指定組件的寬度所表示的 spring static Spring width(Component c) // 計算指定組件的高度所表示的 spring static Spring height(Component c) // 對 spring 所表示的數值大小的獲取和設置 int getValue() void setValue(int value)
2. 代碼實例
package com.xiets.swing; import javax.swing.*; public class Main { public static void main(String[] args) { // 創建窗口 JFrame jf = new JFrame("測試窗口"); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jf.setSize(300, 200); jf.setLocationRelativeTo(null); // 創建內容面板,使用 彈性布局 SpringLayout layout = new SpringLayout(); JPanel panel = new JPanel(layout); jf.setContentPane(panel); // 創建組件 JLabel label = new JLabel("Test JLabel: "); JButton btn = new JButton("Btn"); JTextField textField = new JTextField("Text Field"); // 添加組件到內容面板 panel.add(label); panel.add(btn); panel.add(textField); /* * 組件的約束設置(彈性布局設置的關鍵) */ // 標簽組件約束: 設置標簽的左上角坐標為 (5, 5) SpringLayout.Constraints labelCons = layout.getConstraints(label); // 從布局中獲取指定組件的約束對象(如果沒有,會自動創建) labelCons.setX(Spring.constant(5)); labelCons.setY(Spring.constant(5)); // 按鈕組件約束: 設置左上角 水平坐標為5, 垂直坐標為 標簽的南邊坐標;設置東邊坐標為 標簽的東邊坐標 SpringLayout.Constraints btnCons = layout.getConstraints(btn); btnCons.setX(Spring.constant(5)); btnCons.setY(labelCons.getConstraint(SpringLayout.SOUTH)); btnCons.setConstraint(SpringLayout.EAST, labelCons.getConstraint(SpringLayout.EAST)); // 文本框約束: 設置左上角 水平坐標為 標簽的東邊坐標 + 5, 垂直坐標為 5 SpringLayout.Constraints textFieldCons = layout.getConstraints(textField); textFieldCons.setX( Spring.sum( labelCons.getConstraint(SpringLayout.EAST), Spring.constant(5) ) ); textFieldCons.setY(Spring.constant(5)); /* * 內容面板(容器)的約束設置,即確定 組件 和 容器的右邊和底邊 之間的間隙大小 */ SpringLayout.Constraints panelCons = layout.getConstraints(panel); // 獲取容器的約束對象 // 設置容器的 東邊坐標 為 文本框的東邊坐標 + 5 panelCons.setConstraint( SpringLayout.EAST, Spring.sum( textFieldCons.getConstraint(SpringLayout.EAST), Spring.constant(5) ) ); // 計算出 按鈕 和 文本框 的 南邊坐標 的 值較大者 Spring maxHeightSpring = Spring.max( btnCons.getConstraint(SpringLayout.SOUTH), textFieldCons.getConstraint(SpringLayout.SOUTH) ); // 設置容器的 南邊坐標 為 maxHeightSpring + 5 panelCons.setConstraint( SpringLayout.SOUTH, Spring.sum( maxHeightSpring, Spring.constant(5) ) ); // 顯示窗口 jf.setVisible(true); } }
結果展示:
SpringLayout 更詳細具體的介紹和使用方式,詳見 Java 官方文檔: How to Use SpringLayout
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。