【问题标题】:SpringLayout not working on Java 5 (mac) VERTICAL_CENTERSpringLayout 不适用于 Java 5 (mac) VERTICAL_CENTER
【发布时间】:2014-02-01 17:29:43
【问题描述】:

SpringLayout 的文档说它从 java 1.4 开始可用,我有 7 个旧的 mac 无法升级到任何新版本的 mac os 10.5,这导致我最多只有 java 1.5.0_30。问题是我有一个适用于 spring 布局的应用程序,并且我总是得到这个堆栈回溯:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.SpringLayout$SpringProxy.getValue(SpringLayout.java:674)
at javax.swing.Spring$CompoundSpring.getValue(Spring.java:420)
at javax.swing.Spring$CompoundSpring.getValue(Spring.java:420)
at javax.swing.SpringLayout.layoutContainer(SpringLayout.java:1004)
at java.awt.Container.layout(Container.java:1401)
at java.awt.Container.doLayout(Container.java:1390)
at java.awt.Container.validateTree(Container.java:1473)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validate(Container.java:1448)
at java.awt.Window.show(Window.java:516)
at java.awt.Component.show(Component.java:1317)
at java.awt.Component.setVisible(Component.java:1270)

有什么解决办法,有什么罐子之类的吗?

请避免使用“升级您的计算机”之类的回答

更新:我发现 Java 上有 SpringLayout,但您不能将 VERTICAL_LAYOUT 与 SOUTH 一起使用。我不知道为什么。

更新 2:按照 Ian 的指示,我执行了以下代码,但它仍然无法在 Java 5 上运行

springLayout.putConstraint(SpringLayout.NORTH, myImage, 
            Spring.sum(springLayout.getConstraint(SpringLayout.SOUTH, myPanel) ,
                    Spring.sum(Spring.scale(Spring.minus(springLayout.getConstraint(SpringLayout.HEIGHT, myImage)),0.5f),

                            Spring.scale(Spring.minus(springLayout.getConstraint(SpringLayout.HEIGHT, myPanel)),0.5f)
                    )
             ), SpringLayout.NORTH, myPanel);

更新 3:用 springLayout.getConstraints(myImage).getHeight() 替换 springLayout.getConstraint(SpringLayout.HEIGHT, myImage) 效果很好。 :)

【问题讨论】:

  • 我们需要看看使用springlayout的代码。您正在向容器中添加空组件,或者其他一些此类错误。

标签: java macos swing java-5 springlayout


【解决方案1】:

VERTICAL_CENTER 约束类型是由 Java 6 引入的,这就是为什么它在 Java 5 中不适用于您。但是不变量指定了这一点

VERTICAL_CENTER = NORTH + HEIGHT/2
SOUTH = NORTH + HEIGHT

替换并重新排列我们得到的这些方程

                     NORTH = SOUTH - HEIGHT

           VERTICAL_CENTER = SOUTH - HEIGHT/2
VERTICAL_CENTER + HEIGHT/2 = SOUTH
                  HEIGHT/2 = SOUTH - VERTICAL_CENTER
                    HEIGHT = 2*(SOUTH - VERTICAL_CENTER)

因此,如果您当前正在设置 SOUTHVERTICAL_CENTER,那么您可以通过将 height 设置为大小为 2*(SOUTH - VERTICAL_CENTER) 的弹簧来实现相同的效果。所以替换

constr.putConstraint(SpringLayout.SOUTH, southSpring);
constr.putConstraint(SpringLayout.VERTICAL_CENTER, vcSpring);

constr.putConstraint(SpringLayout.SOUTH, southSpring);
constr.setHeight(
  Spring.scale(Spring.sum(southSpring, Spring.minus(vcSpring)),
               2.0f));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2012-02-08
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多