首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将新的JPanel添加到另一个中会导致NullPointerException

将新的JPanel添加到另一个中会导致NullPointerException
EN

Stack Overflow用户
提问于 2017-06-02 00:43:40
回答 2查看 1.1K关注 0票数 2

我使用IntelliJ的图形用户界面设计器创建了一个带有子面板的JPanel。现在我想要的子面板是一个新的JPanel和readd到我的顶部面板。但这会导致NullPointerExceptiion。为什么以及如何才能解决这个问题?注意:我的组件都没有标记为"Custom Create“

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
    at com.intellij.uiDesigner.core.GridLayoutManager.addLayoutComponent(GridLayoutManager.java:134)
    at java.awt.Container.addImpl(Container.java:1127)
    at java.awt.Container.add(Container.java:417)
    at View.<init>(View.java:16)
    at Main.main(Main.java:4)

查看类

代码语言:javascript
复制
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
public class View{
    private JPanel panel;
    private JPanel subPanel;

    public JPanel getPanel() {
        return panel;
    }

    View()
    {
        panel.remove(subPanel);
        subPanel = newPanel();
        panel.add(subPanel);
    }
    JPanel newPanel(){
        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());
        JLabel label = new JLabel("test");
        panel.add(label);
        return panel;
    }

    private void createUIComponents(){
    }
}

View.form

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="View">
  <grid id="27dc6" binding="panel" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
    <margin top="0" left="0" bottom="0" right="0"/>
    <constraints>
      <xy x="20" y="20" width="500" height="400"/>
    </constraints>
    <properties/>
    <border type="none"/>
    <children>
      <grid id="860ea" binding="subPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
        <margin top="0" left="0" bottom="0" right="0"/>
        <constraints>
          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
        </constraints>
        <properties/>
        <border type="none"/>
        <children/>
      </grid>
      <vspacer id="7838f">
        <constraints>
          <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
        </constraints>
      </vspacer>
    </children>
  </grid>
</form>

Main

代码语言:javascript
复制
import javax.swing.*;
public class Main {
    public static void main(String[] args) {
        View view = new View();
        JFrame frame = new JFrame("Window");
        frame.setContentPane(view.getPanel());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2017-06-02 02:40:58

如果不先手动实例化JPanelGridLayoutManager (IntelliJ)似乎不允许添加新组件。改用GridBagLayout解决了这个问题。

票数 4
EN

Stack Overflow用户

发布于 2021-11-08 19:04:24

您需要添加GridConstraints

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206192269-Hello-noob-question-about-intellij-layout-manager

代码语言:javascript
复制
panel.add(sth, new com.intellij.uiDesigner.core.GridConstraints());

maven对此有依赖关系:

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/com.intellij/forms_rt -->
    <dependency>
        <groupId>com.intellij</groupId>
        <artifactId>forms_rt</artifactId>
        <version>7.0.3</version>
    </dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44313029

复制
相关文章

相似问题

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