📜  Java AWT | SpringLayout 类

📅  最后修改于: 2022-05-13 01:54:58.095000             🧑  作者: Mango

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