Java AWT | SpringLayout 类
AWT(Abstract Window Toolkit) 中的 SpringLayout 类根据一组布局约束将子级布局到其关联的容器中。每个约束都由一个 Spring 对象表示,该对象控制两个组件边缘之间的垂直或水平距离。边缘可以属于容器的任何子容器,也可以属于容器本身。默认情况下, SpringLayout创建约束,使其关联的组件具有最小值、首选、最大值和实际值。
构造函数:
- SpringLayout():用于构造一个新的 SpringLayout 类。
常用方法:
- void addLayoutComponent(Component com, Object cons):如果约束是SpringLayout.Constraints的一个实例,则将约束与指定的组件相关联。
- getLayoutAlignmentX(Container c):用于返回 0.5f(居中)。
- getLayoutAlignmentY(Container c):用于返回 0.5f(居中)。
- getConstraint((String edgeName, Component c):返回控制组件指定边缘与其父对象上边缘或左边缘之间距离的弹簧。
- getConstraint(Component c):返回指定组件的约束。
- layoutContainer(Container parent):用于对指定容器进行布局。
下面的程序说明了 SpringLayout 类:
- 程序1:下面的程序将组件排列在一个JFrame中。我们创建了 1 个名为“ label ”的JLabel组件,并创建了一个名为“ textfield ”的JTextField ,并创建了 2 个类,一个是JFrame 类,另一个是SpringLayout 类,然后通过add()方法将它们添加到JFrame中。我们使用setvisible()方法设置框架的可见性。使用setLayout()方法设置布局。
// Java program to show Example of SpringLayout. // in java. Importing different Package. import java.awt.Container; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SpringLayout; // construct a class springdemo public class Springdemo { // It is used to create and show GUI private static void createAndShowGUI() { // Creating Object of "JFrame" class JFrame frame = new JFrame("MySpringDemp"); // Function to set default // close operation of JFrame. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // to get content pane Container contentPane = frame.getContentPane(); // Creating Object of "Springlayout" class SpringLayout layout = new SpringLayout(); // to set content pane contentPane.setLayout(layout); // Initialization of object // "label" of JLabel class. JLabel label = new JLabel("Label: "); // Initialization of object // "label" of JLabel class. JTextField textField = new JTextField("Enter the text ", 15); // to add content pane of JLabel contentPane.add(label); // to add content pane of JTextField contentPane.add(textField); // It is used to put the layout // constraint in JFrame using springLayout class 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); // Function to pack the JFrame. frame.pack(); // Function to set visible status of JFrame. frame.setVisible(true); } // Main Method public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { // create a class public void run() { // to create and show GUI createAndShowGUI(); } }); } }
输出:
- 程序 2:下面的程序将组件排列在一个JFrame中。我们创建了 1 个名为“ springlayout class”的类,并创建了一个名为“ b1”、“b2”、“b3”、“b4”、“b5 ”的 4 个JButton组件,然后通过add()方法将它们添加到JFrame中。我们使用setvisible()方法设置框架的可见性。布局由setLayout()方法设置。
// Java program to show Example of SpringLayout. // in java. Importing different Package. import java.awt.*; import javax.swing.*; // construct a class Springclassdemo public class Springclassdemo { // Main Method public static void main(String[] arguments) { // main window // Function to set the default look // and feel decorated status of JFrame. JFrame.setDefaultLookAndFeelDecorated(true); // Creating Object of "JFrame" class JFrame frame = new JFrame("SpringLayoutExample Example"); // Function to set the default // close operation status of JFrame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Function to set the // size status of JFrame frame.setSize(300, 200); // to get the content pane Container content = frame.getContentPane(); // Creating Object of "SpringLayout" class SpringLayout layout = new SpringLayout(); // to set the layout class frame.setLayout(layout); // Initialization of object // "b1" of JButton class. Component b1 = new JButton("GEEKS"); // Initialization of object // "b2" of JButton class. Component b2 = new JButton("GFG"); // Initialization of object // "b3" of JButton class. Component b3 = new JButton("JAVA"); // Initialization of object // "b4" of JButton class. Component b4 = new JButton("Sudo Placement"); // Adding the JButton "b1" on frame frame.add(b1); // Adding the JButton "b2" on frame frame.add(b2); // Adding the JButton "b3" on frame frame.add(b3); // Adding the JButton "b4" on frame frame.add(b4); // It is used to put the layout // constraint in JFrame using // springLayout class on b1 JButton layout.putConstraint(SpringLayout.WEST, b1, 25, SpringLayout.WEST, content); layout.putConstraint(SpringLayout.NORTH, b1, 10, SpringLayout.NORTH, content); // It is used to put the layout // constraint in JFrame using // springLayout class on b2 JButton layout.putConstraint(SpringLayout.WEST, b2, 50, SpringLayout.WEST, content); layout.putConstraint(SpringLayout.NORTH, b2, 10, SpringLayout.SOUTH, b1); // It is used to put the layout // constraint in JFrame using // springLayout class on b3 JButton layout.putConstraint(SpringLayout.WEST, b3, 75, SpringLayout.WEST, content); layout.putConstraint(SpringLayout.NORTH, b3, 10, SpringLayout.SOUTH, b2); // It is used to put the layout // constraint in JFrame using // springLayout class on b4 JButton layout.putConstraint(SpringLayout.WEST, b4, 15, SpringLayout.EAST, b1); layout.putConstraint(SpringLayout.NORTH, b4, 10, SpringLayout.NORTH, content); // Function to set the // visible status of JFrame frame.setVisible(true); } }
输出:
注意:上述程序可能无法在在线 IDE 中运行。请使用离线编译器。
参考: https://docs.oracle.com/javase/7/docs/api/javax/swing/SpringLayout.html