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.getConstraint(SpringLayout.HEIGHT, myImage)
它springLayout.getConstraints(myImage).getHeight()
工作得非常好。:)