![](/img/trans.png)
[英]Line wrap in a JTextArea causes JScrollPane to missbehave with MiGLayout
[英]JTextArea in MigLayout causes NullPointerException
我不是揮桿布局經理的專業人士,這種行為使我完全困惑。 本質上,如果沒有得到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中使用Window Designer,所以我假設有些事情使MigLayout構造函數煩人了? 我已經對此打了一段時間,我設法弄清楚的是,添加textArea或textPanes會導致以下異常:
Javax.swing.BoxLayout.preferredLayoutSize(未知源)處的java.lang.NullPointerException javax.swing.JComponent.getPreferredSize(java.awt.Container.getPreferredSize(未知源)處的java.awt.Container.preferredSize(未知源)處的java.lang.NullPointerException javax.swing.JRootPane $ RootLayout.preferredLayoutSize(Unknown Source)處java.awt.Container.getPreferredSize(Unknown Source)處javax.swing.JComponent.getPreferredSize(Unknown Source) net.miginfocom.swing.MigLayout.adjustWindowSize(java.awt.Container.getPreferredSize(Unknown Source)處的java.awt.BorderLayout.preferredLayoutSize(Unknown Source) net.miginfocom.swing.MigLayout.layoutContainer上的Unknown Source)(net.miginfocom.swing.MigLayout.preferredLayoutSize(Unknown Source)上的java.awt.Container.preferredSize(Unknown Source)上的java.awt.Container的Unknown Source)。 javax.swing.JComponent上的getPreferredSize(Unknown Source)。 javax.swing.BoxLayout.checkRequests中的getPreferredSize(Unknown Source)(java.awt.Container.layout中的javax.swing.BoxLayout.layoutContainer(未知源)(java.awt.Container.doLayout中的Unknown Source)(未知源) java.awt.Container.validateTree中的“未知源”(java.awt.Container.validateTree中的java.awt.Container.validateTree(未知源)中的java.awt.Container.validateTree(未知源)中的Unknown Source) )處java.awt.Container.validate(未知源)處java.awt.Component.show(未知源)處java.awt.Component.setVisible(未知源)處Java處java.awt.event.InvocationEvent.dispatch(Unknown Source)處com.soartech.ssim.testbed.gui.TestbedApplication $ 1.run(TestbedApplication.java:25)處的java.awt.Window.setVisible(未知源)。 awt.EventQueue.dispatchEventImpl(未知源)在java.awt.EventQueue.access $ 000(未知源)在java.awt.EventQueue $ 1.run(未知源)在java.awt.EventQueue $ 1.run(未知 Source)java.security.AccessController.doPrivileged(本機方法)java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)java.awt.EventQueue.dispatchEvent(未知源)java.awt.EventDispatchThread.pumpOneEventForFilters(未知源) )處java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)處java.awt.EventDispatchThread.pumpEvents(未知源)處java.awt.EventDispatchThread.pumpEvents(未知源)處java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源) java.awt.EventDispatchThread.run(未知源)線程“ AWT-EventQueue-0”中的異常javax.swing.SizeRequirements.calculateTiledPositions(javax.swing.BoxLayout.layoutContainer處的java.lang.NullPointerException(未知源)在java.awt.Container.layout(Unknown Source)在java.awt.Container.doLayout(Unknown Source)在java.awt.Container.validateTree(Unknown Source)在java.awt.Container.validateTree(Unknown Source)在java .awt.Container.va 在java.awt.Container.validateTree的lidateTree(未知源)在java.awt.Window.dispatchEventImpl的java.awt.Container.validate(未知源)在java.awt.Component.dispatchEvent(未知源) java.awt.EventQueue.dispatchEventImpl(未知源)java.awt.EventQueue.access $ 000(java.awt.EventQueue $ 1.run中的未知源)(java.awt.EventQueue $ 1.run中的Unknown Source) (未知源)在java.security.AccessController.doPrivileged(本地方法)在java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)在java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)在java.awt.EventQueue $ 2。在java.awt.EventQueue處運行(未知源)$ 2。在java.security.AccessController.doPrivileged(本機方法)處運行(未知源)在java.awt.EventQueue處的java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)處。 java.awt.EventDispatchThread.pumpOneEventForFilters中的dispatchEvent(未知源)(未知Sou) rce),位於java.awt.EventDispatchThread.pumpEvents(未知源),位於java.awt.EventDispatchThread.pumpEvents(未知源),位於java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源),位於java.awt.EventDispatchThread.pumpEvents(未知源)在java.awt.EventDispatchThread.run(未知源)
使用MigLayout 4.0,您的代碼可以在我的計算機上正常運行。 如果您修復了源附件,則可以深入研究BoxLayout
並更好地了解正在發生的事情。
沒有源中的實際行號,我在BoxLayout.preferredLayoutSize()
中看到的唯一可能是您的UI設置的是返回空inset的Border
。 這似乎不太可能,但是您可以嘗試像實驗一樣在文本區域上明確設置邊框。
問題最終是我需要讓SwingUtilities為我創建面板,因為它們是通過編程生成的。
Runnable doWorkRunnable = new Runnable() {
public void run() {
for(TestComponent c : Config.getComponents()){
frame.getContentPane().add(new ComponentPanel(c));
frame.getContentPane().add(Box.createRigidArea(new Dimension(5,0)));
}
}
};
SwingUtilities.invokeLater(doWorkRunnable);
現在就位,我可以在我的MigLayout中包括文本區域,而不會出現任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.