Swing SpringLayout類

2019-10-16 22:11:03

SpringLayout類根據一組約束定位其關聯容器的子節點。

類宣告

以下是javax.swing.SpringLayout類的宣告 -

public class SpringLayout
   extends Object
      implements LayoutManager2

欄位

以下是javax.swing.SpringLayout類的欄位 -

  • static String BASELINE - 指定元件的基線。
  • static String EAST - 指定元件邊界矩形的右邊緣。
  • static String HEIGHT - 指定元件邊界矩形的高度。
  • static String HORIZONTAL_CENTER - 指定元件邊界矩形的水平中心。
  • static String NORTH - 指定元件邊界矩形的上邊緣。
  • static String SOUTH - 指定元件邊界矩形的下邊緣。
  • static String VERTICAL_CENTER - 指定元件邊界矩形的垂直中心。
  • static String WEST - 指定元件邊界矩形的左邊緣。
  • static String WIDTH - 指定元件邊界矩形的寬度。

類建構函式

編號 建構函式 描述
1 SpringLayout() 建立一個新的SpringLayout物件。

類方法

編號 類方法 描述
1 void addLayoutComponent(Component component, Object constraints) 如果constraintsSpringLayout.Constraints的範例,則將約束與指定的元件相關聯。
2 void addLayoutComponent(String name, Component c) 沒有效果,因為此布局管理器不使用每個元件的字串。
3 Spring getConstraint(String edgeName, Component c) 返回控制元件指定邊緣與其父級頂部或左側邊緣之間距離的Spring。
4 SpringLayout.Constraints getConstraints(Component c) 返回指定元件的約束。
5 float getLayoutAlignmentX(Container p) 返回0.5f(居中)。
6 float getLayoutAlignmentY(Container p) 返回0.5f(居中)。
7 void invalidateLayout(Container p) 使布局無效,表明如果布局管理器快取了資訊,則應將其丟棄。
8 void layoutContainer(Container parent) 布置指定的容器。
9 Dimension maximumLayoutSize(Container parent) 在給定包含的元件的情況下,計算指定容器的最大大小尺寸。
10 Dimension minimumLayoutSize(Container parent) 在給定容器所包含的元件的情況下,計算指定容器的最小尺寸。
11 Dimension preferredLayoutSize(Container parent) 在給定包含的元件的情況下,計算指定容器的首選大小尺寸。
12 void putConstraint(String e1, Component c1, int pad, String e2, Component c2) 將元件c1的邊緣e1連結到元件c2的邊緣e2,邊緣之間具有固定的距離。
13 void putConstraint(String e1, Component c1, Spring s, String e2, Component c2) 將元件c1的邊緣e1連結到元件c2的邊緣e2
14 void removeLayoutComponent(Component c) 刪除與指定元件關聯的約束。

方法繼承

該類繼承以下類中的方法 -

  • java.lang.Object

SpringLayout範例

使用編輯器建立以下Java程式:SpringLayoutDemo.java

package com.yiibai.layout;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SpringLayoutDemo {
    private JFrame mainFrame;
    private JLabel headerLabel;
    private JLabel statusLabel;
    private JPanel controlPanel;

    public SpringLayoutDemo() {
        prepareGUI();
    }

    public static void main(String[] args) {
        SpringLayoutDemo swingLayoutDemo = new SpringLayoutDemo();
        swingLayoutDemo.showSpringLayoutDemo();
    }

    private void prepareGUI() {
        mainFrame = new JFrame("Java SWING SpringLayoutDemo(tw511.com)");
        mainFrame.setSize(400, 400);
        mainFrame.setLayout(new GridLayout(3, 1));

        headerLabel = new JLabel("", JLabel.CENTER);
        statusLabel = new JLabel("", JLabel.CENTER);
        statusLabel.setSize(350, 100);

        mainFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent windowEvent) {
                System.exit(0);
            }
        });
        controlPanel = new JPanel();
        controlPanel.setLayout(new FlowLayout());

        mainFrame.add(headerLabel);
        mainFrame.add(controlPanel);
        mainFrame.add(statusLabel);
        mainFrame.setVisible(true);
    }

    private void showSpringLayoutDemo() {
        headerLabel.setText("Layout in action: SpringLayout");
        SpringLayout layout = new SpringLayout();

        JPanel panel = new JPanel();
        panel.setLayout(layout);
        JLabel label = new JLabel("輸入姓名: ");
        JTextField textField = new JTextField("", 15);
        panel.add(label);
        panel.add(textField);

        layout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, controlPanel);
        layout.putConstraint(SpringLayout.NORTH, label, 5, SpringLayout.NORTH, controlPanel);
        layout.putConstraint(SpringLayout.WEST, textField, 5, SpringLayout.EAST, label);
        layout.putConstraint(SpringLayout.NORTH, textField, 5, SpringLayout.NORTH, controlPanel);

        layout.putConstraint(SpringLayout.EAST, panel, 5, SpringLayout.EAST, textField);
        layout.putConstraint(SpringLayout.SOUTH, panel, 5, SpringLayout.SOUTH, textField);
        controlPanel.add(panel);
        mainFrame.setVisible(true);
    }
}

執行上面範例程式碼,得到以下結果:

SpringLayout