Java Swing SpringLayout

由 drbear 创建, 最后一次修改 2017-01-09

Java Swing教程 - Java Swing SpringLayout


javax.swing包中的SpringLayout类的实例表示一个SpringLayout管理器。

在SpringLayout管理器的上下文中的弹簧可以被拉伸,压缩或保持在其正常状态。

Spring对象有四个属性:最小值,首选值,最大值和当前值。

当被最大程度压缩时,弹簧具有其最小值。在其正常状态下,它具有其优选值。

在其最拉伸状态下,它具有其最大值。其在任何给定时间点的值是其当前值。

当弹簧的最小值,优选值和最大值相同时,它被称为支柱。

我们可以使用工厂方法创建一个spring。

要从头开始创建spring或strut,我们可以使用它的重载的constant()静态方法。

我们还可以使用组件的宽度或高度创建弹簧。

创建10像素的支柱

Spring strutPadding  = Spring.constant(10);

创建一个有10,25和50的弹簧分别作为其最小值,优选值和最大值。

Spring springPadding = Spring.constant(10, 25,   50);

从名为c1的组件的宽度创建弹簧

Spring s1  = Spring.width(c1);

从名为c1的组件的宽度创建弹簧...

Spring s2  = Spring.height(c1);

Spring类有一些实用程序方法,让我们操纵spring属性。

Spring类有一些实用程序方法,让我们操纵spring属性。...

Spring s3  = Spring.sum(s1, s2);

我们可以通过minus()方法从另一个减去一个弹簧来创建一个弹簧。

我们可以通过minus()方法从另一个减去一个弹簧来创建一个弹簧。...

使用scale()方法创建另一个弹簧的一部分。

String fractionSpring = Spring.scale(s1, 0.40f);
import java.awt.Container;
/*  ww  w .  j a  va 2  s  .  c  o m*/
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SpringLayout;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("SpringLayout");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = frame.getContentPane();

    // Set the content pane"s layout as SpringLayout
    SpringLayout springLayout = new SpringLayout();
    contentPane.setLayout(springLayout);

    // Add two JButtons to the content pane
    JButton b1 = new JButton("Button 1");
    JButton b2 = new JButton("Little Bigger   Button   2");
    contentPane.add(b1);
    contentPane.add(b2);

    frame.pack();
    frame.setVisible(true);
  }
}


约束

下表列出了SpringLayout类中定义的常量。

常量名称 描述
NORTH 它是y的同义词。 它是组件的顶部边缘。
WEST 它是x的同义词。 它是组件的左边缘。
SOUTH 它是组件的底部边缘。 其值与NORTH + HEIGHT相同。
EAST 它是组件的右边缘。 它与WEST + WIDTH相同。
WIDTH 组件的宽度。
HEIGHT 组件的高度。
HORIZONTAL_CENTER 它是组件的水平中心。 它与WEST + WIDTH / 2相同。
VERTICAL_CENTER 它是组件的垂直中心。 它与NORTH + HEIGHT / 2相同。
BASELINE 它是组件的基线。

以下代码显示了如何设置组件相对于容器或另一个组件的x和y约束。

import java.awt.Container;
//  w  w  w  . j  ava 2s.  co m
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Spring;
import javax.swing.SpringLayout;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("SpringLayout");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = frame.getContentPane();

    // Set the content pane"s layout to a SpringLayout
    SpringLayout springLayout = new SpringLayout();
    contentPane.setLayout(springLayout);

    // Add two JButtons to the content pane
    JButton b1 = new JButton("Button 1");
    JButton b2 = new JButton("Button Second");

    // Create Constraints objects for b1 and b2
    SpringLayout.Constraints b1c = new SpringLayout.Constraints();
    SpringLayout.Constraints b2c = new SpringLayout.Constraints();

    // Create a Spring object for y value for b1 and b2
    Spring yPadding = Spring.constant(20);

    // Set (10, 20) for (x, y) for b1
    b1c.setX(Spring.constant(10));
    b1c.setY(yPadding);

    // Set (150, 20) for (x, y) for b2
    b2c.setX(Spring.constant(150));
    b2c.setY(yPadding);

    // Use the Constraints object while adding b1 and b2
    contentPane.add(b1, b1c);
    contentPane.add(b2, b2c);

    frame.pack();
    frame.setVisible(true);
  }
}

要在SpringLayout中设置组件的约束,我们也可以使用SpringLayout类的putConstraint()方法。

这里有两个版本的putConstraint()方法:

void  putConstraint(String targetEdge, Component targetComponent, int  padding, String sourceEdge,Component sourceComponent)

void  putConstraint(String targetEdge, Component targetComponent, Spring padding, String  sourceEdge, Component sourceComponent)

第一个版本使用支柱。 int padding定义了一个固定弹簧,它将作为两个组件边缘之间的支柱(固定距离)。

第二个版本使用弹簧。

b2的左边缘的位置为5像素从b1的右边缘,使用以下方法。

springLayout.putConstraint(SpringLayout.WEST, b2,   5, SpringLayout.EAST, b1);

要从内容窗格的左边缘设置b1的10个像素的左边缘。

springLayout.putConstraint(SpringLayout.WEST, b1,   5, SpringLayout.WEST,   contentPane);


例子

下面的代码展示了如何使用SpringLayout类的putConstraint()方法。

import java.awt.Container;
/*  www .  j av  a  2s  . c o  m*/
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SpringLayout;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("SpringLayout2");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = frame.getContentPane();
    SpringLayout springLayout = new SpringLayout();
    contentPane.setLayout(springLayout);

    JButton b1 = new JButton("Button 1");
    JButton b2 = new JButton("Button Second");

    contentPane.add(b1);
    contentPane.add(b2);

    springLayout.putConstraint(SpringLayout.WEST, b1, 10, SpringLayout.WEST, contentPane);
    springLayout.putConstraint(SpringLayout.NORTH, b1, 20, SpringLayout.NORTH, contentPane);

    springLayout.putConstraint(SpringLayout.WEST, b2, 10, SpringLayout.EAST, b1);

    springLayout.putConstraint(SpringLayout.NORTH, b2, 20,SpringLayout.NORTH, contentPane);

    springLayout.putConstraint(SpringLayout.SOUTH, contentPane, 10,SpringLayout.SOUTH, b1);

    springLayout.putConstraint(SpringLayout.EAST, contentPane, 10, SpringLayout.EAST, b2);

    frame.pack();
    frame.setVisible(true);
  }
}
以上内容是否对您有帮助:

二维码
建议反馈
二维码