【问题标题】:IntelliJ gui creator: JPanel gives runtime null pointer exception upon adding any componentIntelliJ gui 创建者:JPanel 在添加任何组件时给出运行时空指针异常
【发布时间】:2012-03-27 04:43:15
【问题描述】:

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

我用 ItelliJ GridLayoutManager 创建了一个空白的 JPanel“questionPanel”。 当我尝试向该面板添加任何内容时,即使面板绝对不为空,我也会收到空指针异常。我还尝试将 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
}

是否有人知道幕后发生的事情或我将组件放到面板上的方法?谢谢。

Sample Stack Trace(此trace不是由与上面相同的代码进行的,但它是相同的错误):

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)
.....

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 也许你检查了自定义创建?

标签: java swing intellij-idea jpanel


【解决方案1】:

我也有同样的error,经过一番研究后,我明白了。问题是如果JPanelLayout Manager 等于GridLayoutManager(IntelliJ),则不能将组件添加到JPanel

如果您有同样的问题。

  • 转到GUI Designer
  • 选择您要为其添加组件的JPanel
  • 在属性面板中,将Layout Manager 更改为除GridLayoutManager(IntelliJ)FormLayout(JGoodies) 之外的任何内容

或以编程方式

contentPane.setLayout(new CardLayout());

【讨论】:

  • ✔️ 适用于 IntellJ 2020.01 Ultimate
【解决方案2】:

我已在JetBrains website 上将此问题作为错误提交并收到以下答复:

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

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

或使用其他布局。

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

为了便于阅读,我缩短并编辑了答案

【讨论】:

  • 在哪里添加 GridContraint?初始化面板时发生异常,但在初始化之前我无法调用 panel.add。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    Intellij IDEA GUI 创建器还允许您将图像作为标签插入。为此,在您想要的任何地方创建一个标签,并在其配置中找到和图标插槽,您将在其中选择图像的路径。就是这样!!

    【讨论】:

      【解决方案5】:

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

      例子:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多