首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JTextArea in MigLayout引起NullPointerException

JTextArea in MigLayout引起NullPointerException
EN

Stack Overflow用户
提问于 2012-01-18 03:15:06
回答 2查看 1.3K关注 0票数 2

我不是一个专业的秋千布局经理,这种行为完全令我困惑。本质上,我不能在没有JTextArea或JTextPane的情况下向MigLayout添加NullPointerException。

我创建了一个扩展JPanel的类:

代码语言:javascript
运行
复制
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,当我尝试构建时它会抛出一个异常:

代码语言:javascript
运行
复制
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会导致以下异常:

javax.swing.BoxLayout.preferredLayoutSize(Unknown源的

java.lang.NullPointerException (未知源)在java.awt.Container.preferredSize(未知源)在java.awt.Container.getPreferredSize(未知源)在javax.swing.JRootPane$RootLayout.preferredLayoutSize(Unknown源)在java.awt.Container.preferredSize(未知源)在java.awt.Container.getPreferredSize(未知源)在javax.swing.JComponent.getPreferredSize(Unknown(来源)在java.awt.BorderLayout.preferredLayoutSize(Unknown来源)在java.awt.Container.preferredSize(未知来源)在java.awt.Container.getPreferredSize(未知来源)在net.miginfocom.swing.MigLayout.layoutContainer(Unknown来源)在net.miginfocom.swing.MigLayout.preferredLayoutSize(Unknown来源)在java.awt.Container.preferredSize(未知来源)在java.awt.Container.getPreferredSize(未知源( javax.swing.JComponent.getPreferredSize(Unknown )在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(未知源)com.soartech.ssim.testbed.gui.TestbedApplication$1.run(TestbedApplication.java:25) at java.awt.event.InvocationEvent.dispatch(Unknown at java.awt.Container.validate(未知源) at java.awt.Window.show(未知源) at java.awt.Component.show(未知源)在java.awt.Component.setVisible(未知源)在java.awt.Window.setVisible(未知源)(未知源)在java.awt.EventQueue$1.运行(未知源)在java.awt.EventQueue$1.运行(未知源)在java.security.AccessController.doPrivileged(Native方法运行(未知源)在java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown来源)在java.awt.EventQueue.dispatchEvent(未知源)在java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown源)(在java.awt.EventDispatchThread.pumpEventsForFilter(Unknown源)在java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown源)在java.awt.EventDispatchThread.pumpEvents(Unknown源)在java.awt.EventDispatchThread.pumpEvents(Unknown源)在java.awt.EventDispatchThread.run(未知源)异常线程"AWT-EventQueue-0“java.lang.NullPointerException at javax.swing.SizeRequirements.calculateTiledPositions(Unknown Source)在javax.swing.BoxLayout.layoutContainer(未知源)在java.awt.Container.layout(未知源)在java.awt.Container.doLayout(未知源) at java.awt.Container.validateTree(未知源) at java.awt.Container.validateTree(未知源)在java.awt.Container.validate(未知源)在java.awt.Window.dispatchEventImpl(未知源)处(未知源)在java.awt.EventQueue$1.运行(未知源)在java.awt.EventQueue$1.运行(未知源)在java.security.AccessController.doPrivileged(Native方法运行(未知源)在java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown来源)在java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown源)在java.awt.EventQueue$2.运行(未知源)在java.security.AccessController.doPrivileged(Native方法)在java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown源)在java.awt.EventQueue.dispatchEvent(未知源在java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)在java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source(在java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)在java.awt.EventDispatchThread.pumpEvents(Unknown Source)java.awt.EventDispatchThread.pumpEvents(Unknown源) at java.awt.EventDispatchThread.run(未知源)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-18 15:53:13

问题是,我需要让SwingUtilities为我创建面板,因为它们是以编程方式生成的。

代码语言:javascript
运行
复制
    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中没有任何问题地包含文本区域。

票数 0
EN

Stack Overflow用户

发布于 2012-01-18 04:10:12

使用MigLayout 4.0,您的代码在我的计算机上运行良好。如果您修复了源附件,您可能会深入了解BoxLayout并更好地了解正在发生的事情。

在源代码中没有实际行号的情况下,我在BoxLayout.preferredLayoutSize()中看到的唯一可能抛出的东西是,如果您的UI正在设置返回空嵌入的Border。这似乎不太可能,但您可以尝试显式地在文本区域设置一个边框,就像一个实验一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8904716

复制
相关文章

相似问题

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