当前位置: 首页 > 教程 > Java Swing >

Java SpringLayout

精华
小牛编辑
140浏览
2023-03-14

1 Java SpringLayout的介绍

SpringLayout 中 安排根据一组约束的其相关联的容器的孩子。Constraints都不过是双组分边缘之间的水平和垂直距离。每个约束都由一个SpringLayout.Constraint对象表示。

SpringLayout容器的每个子容器以及容器本身都具有一组与之关联的约束。

每个边缘位置取决于另一个边缘的位置。如果添加了约束以创建新的边线,则先前的绑定将被丢弃。SpringLayout不会自动设置其管理的组件的位置。

2 Java SpringLayout的内部类

内部类 描述
static class SpringLayout.Constraints 它是一个Constraints对象,有助于控制由SpringLayout控制的容器中组件的大小和位置变化

3 Java 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 指定组件边界矩形的宽度。

4 Java SpringLayout的方法

方法 描述
void addLayoutComponent(Component component, Object constraints) 如果constraints是SpringLayout.Constraints的实例,则将约束与指定的组件相关联。
void addLayoutComponent(String name, Component c) 没有效果,因为此布局管理器不使用每个组件的字符串。
Spring getConstraint(String edgeName, Component c) 返回控制组件指定边缘与其父级顶部或左侧边缘之间距离的Spring。
SpringLayout.Constraints getConstraints(Component c) 返回指定组件的约束。
float getLayoutAlignmentX(Container p) 返回0.5f(居中)。
float getLayoutAlignmentY(Container p) 返回0.5f(居中)。
void invalidateLayout(Container p) 使布局无效,指示如果布局管理器已缓存信息,则应将其丢弃。
void layoutContainer(Container parent) 对指定的容器进行布局。
Dimension maximumLayoutSize(Container parent) 给定其中包含的组件,它用于计算指定容器的最大尺寸。
Dimension minimumLayoutSize(Container parent) 给定其中包含的组件,它用于计算指定容器的最小尺寸。
Dimension preferredLayoutSize(Container parent) 给定其中包含的组件,它用于计算指定容器的首选尺寸尺寸。

5 Java SpringLayout的案例

package cn.xnip;

/**
 * 小牛知识库网: https://www.xnip.cn
 */

import java.awt.Container;
import javax.swing.JFrame;  
import javax.swing.JLabel;  
import javax.swing.JTextField;  
import javax.swing.SpringLayout;  
public class MySpringDemo {  
     private static void createAndShowGUI() {  
            JFrame frame = new JFrame("SpringLayout案例-小牛知识库网");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
            Container contentPane = frame.getContentPane();  
            SpringLayout layout = new SpringLayout();  
            contentPane.setLayout(layout);  
  
            JLabel label = new JLabel("Label: ");  
            JTextField textField = new JTextField("My Text Field", 15);  
            contentPane.add(label);  
            contentPane.add(textField);  
       
            layout.putConstraint(SpringLayout.WEST, label,6,SpringLayout.WEST, contentPane);  
            layout.putConstraint(SpringLayout.NORTH, label,6,SpringLayout.NORTH, contentPane);  
            layout.putConstraint(SpringLayout.WEST, textField,6,SpringLayout.EAST, label);  
            layout.putConstraint(SpringLayout.NORTH, textField,6,SpringLayout.NORTH, contentPane);  
            layout.putConstraint(SpringLayout.EAST, contentPane,6,SpringLayout.EAST, textField);  
            layout.putConstraint(SpringLayout.SOUTH, contentPane,6,SpringLayout.SOUTH, textField);  
  
            frame.pack();  
            frame.setVisible(true);  
        }  
        public static void main(String[] args) {  
            javax.swing.SwingUtilities.invokeLater(new Runnable() {  
                public void run() {  
                    createAndShowGUI();  
                }  
            });  
        }  
    }  

输出结果为: