IntelliJ gui创建者:JPanel在添加任何组件时给出运行时空指针异常

时间:2012-03-09 18:20:37

标签: java swing intellij-idea jpanel

我遇到IntelliJ的java gui创建问题。不幸的是,面板背后的大部分代码都隐藏在gui创建者中,而且我不能编辑。

我使用ItelliJ GridLayoutManager创建了一个空白的JPanel“questionPanel”。 当我尝试向该面板添加任何内容时,即使面板绝对不为null,我也会得到一个空指针异常。我也尝试将JTextField添加到布局中(出于好奇心),这也没有帮助。 JTextField显示,但我仍然无法在代码中添加任何内容。

当我将布局管理器更改为其他任何内容(GridBagLayout,FormLayout,BorderLayout等)时,我不会再出现错误,但没有显示任何错误。

DisplayView.java

private JPanel questionPane;

public void initialize()
{
    questionPane.addMouseListener(new MouseListener() {

        @Override
        public void mouseReleased(MouseEvent e) {
            questionPane.add(new JLabel("Test"));
            System.out.println("Click event received.");
        }
        //other overrides hidden
}

是否有人了解幕后发生的事情或者让我将组件放到面板上的方法?感谢。

示例堆栈跟踪(此跟踪不是由与上面相同的代码生成,但它是相同的错误):

Exception occurred during event dispatching:
java.lang.NullPointerException

at com.intellij.uiDesigner.core.GridLayoutManager.addLayoutComponent(
GridLayoutManager.java:134)

at java.awt.Container.addImpl(Container.java:1074)
at java.awt.Container.add(Container.java:365)
at [MyProject].UI.View.DisplayView$1.actionPerformed(DisplayView.java:91)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
.....

5 个答案:

答案 0 :(得分:12)

对于使用IntelliJ的GUI创建者并收到相同错误的任何人,我通过在代码中手动设置面板的布局管理器而不是在GUI创建者中选择不同的布局管理器来解决问题。

示例:

questionPane.setLayout(new BoxLayout(questionPane, BoxLayout.PAGE_AXIS));

答案 1 :(得分:2)

我已将此问题作为JetBrains website的错误提交,并收到以下答案:

  

对于修复NPE,请使用GridLayoutManager GridConstraints将子组件添加到JPanel,如下所示:

panel.add(new JLabel(), new GridConstraints(...))
  

或使用其他布局。

使用GridConstraints就像使用另一个LayoutManager一样解决了我的问题。

我缩短了&编辑了答案的可读性

答案 2 :(得分:1)

我得到了和你一样的错误。我有一个JPAnel,布局管理器设置为GridLayoutManager Intellij。当我尝试将任何组件添加到此面板时,我得到了例外。

然后我进入GUI编辑器并更改为BorderLayout,一切正常。我不确定为什么它不适合你。

答案 3 :(得分:1)

我有相同的error,经过一番研究之后,我明白了。问题是,如果JPanel的{​​{1}}等于Layout Manager,则无法将组件添加到JPanel

如果您遇到相同的问题。

  • 转到GridLayoutManager(IntelliJ)
  • 选择要向其添加组件的GUI Designer
  • 从属性面板中,将JPanel更改为Layout ManagerGridLayoutManager(IntelliJ)以外的任何内容

IntelliJ GUI Designer properties panel

或以编程方式

FormLayout(JGoodies)

答案 4 :(得分:0)

Intellij IDEA GUI创建器还允许您将图像作为标签插入。为此,您可以随时随地创建标签,在其配置中,您可以找到并选择图标插槽,您可以在其中选择图像的路径。就是这样!!