首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringLayout不使用Java5 (mac) VERTICAL_CENTER

SpringLayout不使用Java5 (mac) VERTICAL_CENTER
EN

Stack Overflow用户
提问于 2014-02-01 17:29:43
回答 1查看 155关注 0票数 0

SpringLayout的文档说,它是从Java1.4开始提供的,我有7台旧的macs,它们不能升级到MacOS10.5的任何更新版本,这导致我最多只能使用java 1.5.0_30。问题是,我有一个处理spring布局的应用程序,而且我总是得到这个堆栈跟踪:

代码语言:javascript
复制
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与Southern.com结合使用。我不知道为什么。

更新2:按照Ian的指示,我执行了以下代码,但它仍未在Java 5上工作

代码语言:javascript
复制
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.getConstraint(SpringLayout.HEIGHT, myImage)替换springLayout.getConstraints(myImage).getHeight() --它运行得非常好。:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-01 19:36:05

VERTICAL_CENTER约束类型是由Java6引入的,这就是为什么它在Java 5中不起作用的原因。

代码语言:javascript
复制
VERTICAL_CENTER = NORTH + HEIGHT/2
SOUTH = NORTH + HEIGHT

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

代码语言:javascript
复制
                     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,则可以通过将高度设置为2*(SOUTH - VERTICAL_CENTER)大小的弹簧来达到相同的效果。所以替换

代码语言:javascript
复制
constr.putConstraint(SpringLayout.SOUTH, southSpring);
constr.putConstraint(SpringLayout.VERTICAL_CENTER, vcSpring);

使用

代码语言:javascript
复制
constr.putConstraint(SpringLayout.SOUTH, southSpring);
constr.setHeight(
  Spring.scale(Spring.sum(southSpring, Spring.minus(vcSpring)),
               2.0f));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21501199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档