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

2022-09-04 01:10:06

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

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

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

显示视图.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)
.....

答案 1

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

例:

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

答案 2

我已将此问题作为错误提交到 JetBrains 网站上,并收到了以下答案:

对于修复 NPE,请将一个子组件添加到带有 GridLayoutManager GridConstraints 的 JPanel 中,如下所示:

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

或使用其他布局。

使用GridConstraints为我解决了这个问题,就像使用另一个布局管理器一样。

我缩短并编辑了答案以提高可读性


推荐