欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Swing SpringLayout彈性布局的實(shí)現(xiàn)代碼

 更新時(shí)間:2019年12月05日 10:01:38   作者:xietansheng  
這篇文章主要介紹了Java Swing SpringLayout彈性布局的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 概述

官方JavaDocsApi:

SpringLayout,彈性布局管理器。使用該布局的容器內(nèi)的 每一個(gè)組件或容器都對(duì)應(yīng)著一個(gè)約束,通過(guò)該約束定義組件或容器四條邊的坐標(biāo)位置 來(lái)實(shí)現(xiàn)對(duì)組件的布局。該布局主要涉及三個(gè)類: SpringLayout、SpringLayout.Constraints、Spring,分別表示 布局管理器、約束、坐標(biāo)距離。

(1)SpringLayout

表示一個(gè)布局管理器,通過(guò)該布局管理器可以獲取組件或容器的約束對(duì)象,如下:

// 創(chuàng)建 彈性布局管理器 和 容器,容器 使用 彈性布局
SpringLayout layout = new SpringLayout();
JPanel panel = new JPanel(layout);

// 創(chuàng)建 按鈕組件,并添加到 容器
JButton btn = new JButton("Button");
panel.add(btn);

// 獲取 按鈕組件 的 約束對(duì)象(如果沒(méi)有,會(huì)自動(dòng)創(chuàng)建)
SpringLayout.Constraints btnCons = layout.getConstraints(btn);
// 獲取 容器組件 的 約束對(duì)象(如果沒(méi)有,會(huì)自動(dòng)創(chuàng)建)
SpringLayout.Constraints panelCons = layout.getConstraints(panel);

(2)SpringLayout.Constraints

表示對(duì) 組件位置和尺寸的約束,每個(gè)組件實(shí)例都對(duì)應(yīng)著一個(gè)約束對(duì)象,通過(guò)該約束可以 獲取和設(shè)置 組件四條邊的 坐標(biāo)和寬高,常用方法如下:

/*
 * 組件左上角坐標(biāo)的設(shè)置(這里 X 相當(dāng)于 WEST,Y 相當(dāng)于 NORTH)
 */
void  setX(Spring x)
void  setY(Spring y)
Spring getX()
Spring getY()

/*
 * 組件寬高的設(shè)置
 */
void  setWidth(Spring w)
void  setHeight(Spring h)
Spring getHeight()
Spring getWidth()

/*
 * 組件指定邊的的坐標(biāo)或長(zhǎng)度設(shè)置
 * 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 中對(duì) 距離的度量。一個(gè) Spring 實(shí)例,表示一段距離或長(zhǎng)度,并且支持簡(jiǎn)單的算術(shù)運(yùn)算(通過(guò) Spring 提供的靜態(tài)方法進(jìn)行計(jì)算),常用方法如下:

// 創(chuàng)建一個(gè)指定長(zhǎng)度的 spring
static Spring constant(int pref)

// 兩個(gè) spring 相加,得到新的一個(gè) spring
static Spring sum(Spring s1, Spring s2)

// 計(jì)算兩個(gè) spring 之間的較大者
static Spring max(Spring s1, Spring s2)

// 對(duì) spring 的縮放
static Spring scale(Spring s, float factor)

// 計(jì)算指定組件的寬度所表示的 spring
static Spring width(Component c)

// 計(jì)算指定組件的高度所表示的 spring
static Spring height(Component c)

// 對(duì) spring 所表示的數(shù)值大小的獲取和設(shè)置
int  getValue()
void setValue(int value)

2. 代碼實(shí)例

package com.xiets.swing;

import javax.swing.*;

public class Main {

  public static void main(String[] args) {
    // 創(chuàng)建窗口
    JFrame jf = new JFrame("測(cè)試窗口");
    jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    jf.setSize(300, 200);
    jf.setLocationRelativeTo(null);

    // 創(chuàng)建內(nèi)容面板,使用 彈性布局
    SpringLayout layout = new SpringLayout();
    JPanel panel = new JPanel(layout);
    jf.setContentPane(panel);

    // 創(chuàng)建組件
    JLabel label = new JLabel("Test JLabel: ");
    JButton btn = new JButton("Btn");
    JTextField textField = new JTextField("Text Field");

    // 添加組件到內(nèi)容面板
    panel.add(label);
    panel.add(btn);
    panel.add(textField);

    /*
     * 組件的約束設(shè)置(彈性布局設(shè)置的關(guān)鍵)
     */

    // 標(biāo)簽組件約束: 設(shè)置標(biāo)簽的左上角坐標(biāo)為 (5, 5)
    SpringLayout.Constraints labelCons = layout.getConstraints(label); // 從布局中獲取指定組件的約束對(duì)象(如果沒(méi)有,會(huì)自動(dòng)創(chuàng)建)
    labelCons.setX(Spring.constant(5));
    labelCons.setY(Spring.constant(5));

    // 按鈕組件約束: 設(shè)置左上角 水平坐標(biāo)為5, 垂直坐標(biāo)為 標(biāo)簽的南邊坐標(biāo);設(shè)置東邊坐標(biāo)為 標(biāo)簽的東邊坐標(biāo)
    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));

    // 文本框約束: 設(shè)置左上角 水平坐標(biāo)為 標(biāo)簽的東邊坐標(biāo) + 5, 垂直坐標(biāo)為 5
    SpringLayout.Constraints textFieldCons = layout.getConstraints(textField);
    textFieldCons.setX(
        Spring.sum(
            labelCons.getConstraint(SpringLayout.EAST),
            Spring.constant(5)
        )
    );
    textFieldCons.setY(Spring.constant(5));

    /*
     * 內(nèi)容面板(容器)的約束設(shè)置,即確定 組件 和 容器的右邊和底邊 之間的間隙大小
     */
    SpringLayout.Constraints panelCons = layout.getConstraints(panel); // 獲取容器的約束對(duì)象

    // 設(shè)置容器的 東邊坐標(biāo) 為 文本框的東邊坐標(biāo) + 5
    panelCons.setConstraint(
        SpringLayout.EAST,
        Spring.sum(
            textFieldCons.getConstraint(SpringLayout.EAST),
            Spring.constant(5)
        )
    );

    // 計(jì)算出 按鈕 和 文本框 的 南邊坐標(biāo) 的 值較大者
    Spring maxHeightSpring = Spring.max(
        btnCons.getConstraint(SpringLayout.SOUTH),
        textFieldCons.getConstraint(SpringLayout.SOUTH)
    );

    // 設(shè)置容器的 南邊坐標(biāo) 為 maxHeightSpring + 5
    panelCons.setConstraint(
        SpringLayout.SOUTH,
        Spring.sum(
            maxHeightSpring,
            Spring.constant(5)
        )
    );

    // 顯示窗口
    jf.setVisible(true);
  }

}

結(jié)果展示:

SpringLayout 更詳細(xì)具體的介紹和使用方式,詳見(jiàn) Java 官方文檔: How to Use SpringLayout

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論