【发布时间】:2012-02-12 20:27:39
【问题描述】:
我不是挥杆布局管理器的专业人士,这种行为完全让我感到困惑。基本上我不能在没有得到 NullPointerException 的情况下将 JTextArea 或 JTextPane 添加到我的 MigLayout。
我创建了一个扩展 JPanel 的类:
public ComponentPanel(TestComponent testComponent) {
setLayout(new MigLayout("", "[]", "[][][][][][]"));
JLabel lblNewLabel = new JLabel("New label");
add(lblNewLabel, "cell 0 0");
JButton button = new JButton("New button");
add(button, "cell 0 3");
JButton btnNewButton = new JButton("New button");
add(btnNewButton, "cell 0 5");
}
这很好用。但是,如果我尝试添加一个 textArea,它会在我尝试构建时抛出异常:
public ComponentPanel(TestComponent testComponent) {
setLayout(new MigLayout("", "[grow]", "[][grow][][][][]"));
JLabel lblNewLabel = new JLabel("New label");
add(lblNewLabel, "cell 0 0");
JTextArea textArea = new JTextArea();
add(textArea, "cell 0 1,grow");
JButton button = new JButton("New button");
add(button, "cell 0 3");
JButton btnNewButton = new JButton("New button");
add(btnNewButton, "cell 0 5");
}
我在 Eclipse 中使用窗口设计器,所以我假设有什么东西正在启动 MigLayout 构造函数?我已经为此苦苦思索了一段时间,但我设法弄清楚的是添加 textArea 或 textPanes 会导致以下异常:
java.lang.NullPointerException 在 javax.swing.BoxLayout.preferredLayoutSize(未知来源)在 java.awt.Container.preferredSize(未知来源)在 java.awt.Container.getPreferredSize(未知来源)在 javax.swing.JComponent.getPreferredSize(未知来源)在 javax.swing.JRootPane$RootLayout.preferredLayoutSize(未知来源) 在 java.awt.Container.preferredSize(Unknown Source) 在 java.awt.Container.getPreferredSize(未知来源)在 javax.swing.JComponent.getPreferredSize(未知来源)在 java.awt.BorderLayout.preferredLayoutSize(未知来源)在 java.awt.Container.preferredSize(未知来源)在 java.awt.Container.getPreferredSize(未知来源)在 net.miginfocom.swing.MigLayout.adjustWindowSize(未知来源)在 net.miginfocom.swing.MigLayout.layoutContainer(未知来源)在 net.miginfocom.swing.MigLayout.preferredLayoutSize(未知来源)在 java.awt.Container.preferredSize(未知来源)在 java.awt.Container.getPreferredSize(未知来源)在 javax.swing.JComponent.getPreferredSize(未知来源)在 javax.swing.BoxLayout.checkRequests(未知来源)在 javax.swing.BoxLayout.layoutContainer(未知来源)在 java.awt.Container.layout(未知来源)在 java.awt.Container.doLayout(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validate(未知来源)在 java.awt.Window.show(未知来源)在 java.awt.Component.show(未知来源)在 java.awt.Component.setVisible(未知来源)在 java.awt.Window.setVisible(未知来源)在 com.soartech.ssim.testbed.gui.TestbedApplication$1.run(TestbedApplication.java:25) 在 java.awt.event.InvocationEvent.dispatch(Unknown Source) 在 java.awt.EventQueue.dispatchEventImpl(未知来源)在 java.awt.EventQueue.access$000(未知来源)在 java.awt.EventQueue$1.run(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue.dispatchEvent(未知源)在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知 来源)在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(Unknown Source) 在 java.awt.EventDispatchThread.run(未知来源)线程中的异常 “AWT-EventQueue-0”java.lang.NullPointerException 在 javax.swing.SizeRequirements.calculateTiledPositions(未知来源) 在 javax.swing.BoxLayout.layoutContainer(Unknown Source) 在 java.awt.Container.layout(未知来源)在 java.awt.Container.doLayout(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validateTree(未知来源)在 java.awt.Container.validate(未知来源)在 java.awt.Window.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.EventQueue.dispatchEventImpl(未知来源)在 java.awt.EventQueue.access$000(未知来源)在 java.awt.EventQueue$1.run(Unknown Source) at java.awt.EventQueue$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知 来源)在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue$2.run(未知源)在 java.awt.EventQueue$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue.dispatchEvent(未知源)在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知 来源)在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(Unknown Source) 在 java.awt.EventDispatchThread.run(未知来源)
【问题讨论】:
-
如果你把JTextArea改成其他组件,比如按钮、标签等,它是否有效?
标签: java eclipse swing miglayout windowbuilder