Intellij,使用 swing 设计器“contentPane 不能设置为 null”

问题描述 投票:0回答:4

我正在尝试

Intellij Idea
,并尝试进行一些
Swing
开发。我遇到了一个我从未在
Eclipse
上遇到过的问题,我想知道我是否设置错误。

这是我的 GUI 类,由我的驱动程序运行:

package view;

import javax.swing.*;
import java.awt.*;

public class View {

    private JPanel panel;

    public void run() {
        JFrame frame = new JFrame("Vending Machine");
        frame.setContentPane(new View().panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    {
    // GUI initializer generated by IntelliJ IDEA GUI Designer
    // >>> IMPORTANT!! <<<
    // DO NOT EDIT OR ADD ANY CODE HERE!
        $$$setupUI$$$();
    }

/**
 * Method generated by IntelliJ IDEA GUI Designer
 * >>> IMPORTANT!! <<<
 * DO NOT edit this method OR call it in your code!
 *
 * @noinspection ALL
 */
    
private void $$$setupUI$$$() {
        final JPanel panel1 = new JPanel();
        panel1.setLayout(new GridBagLayout());
    }
}

据我所知,我的

run()
方法非常简单。但是,编译后,这是我收到的错误:

Exception in thread "main" java.awt.IllegalComponentStateException: contentPane cannot be set to null.
at javax.swing.JRootPane.setContentPane(JRootPane.java:621)
at javax.swing.JFrame.setContentPane(JFrame.java:698)
at view.View.run(View.java:13)
at model.VendingMachine.<init>(VendingMachine.java:14)
at controller.Driver.main(Driver.java:14)

无论出于何种原因,

Intellij
自动创建的代码都无法正确初始化
JPanel
,这就是它为空的原因。

我尝试在运行中自己实例化它(

panel = new JPanel();
),但这没有帮助。

这是显而易见的事情吗?我在开始使用

Swing
中的
Eclipse
时从未遇到过这个问题。

java swing intellij-idea jpanel contentpane
4个回答
1
投票

您需要确保设置面板的字段名称。您可能误解了以下行:

frame.setContentPane(new View().panel);

在这段代码中,new View().panel实际上是在尝试使用字段名称初始化对象。因此,如果面板没有该名称...显然您正在尝试实例化不存在的东西。

我在 jform 编辑器中的字段名称属性下将我的 JPanel MainPanel 命名为:

frame.setContentPane(new View().MainPanel);


0
投票

您正在将面板“panel”设置为 JFrame 的内容窗格,但您正在创建的 JPanel 称为“panel1”。要解决此问题,请将 JPanel 的名称更改为“panel”而不是“panel1”。


0
投票

尝试在 Intellij IDEA 中启用“UI Designer”插件,它对我的情况有帮助。 文件 -> 设置 -> 插件 -> UI 设计器 -> 重新启动 IDE


0
投票

为了使用 IntelliJ UI Designer,您必须使用 IntelliJ 编译代码,在我的问题中,我使用 gradle 进行构建。

步骤:

  1. 转到设置:编辑器 --> GUI 设计器 --> 生成 GUI 到(从二进制替换为 Java)
  2. 添加 gradle 依赖 -
    implementation group: 'com.intellij', name: 'forms_rt', version: '7.0.3'
© www.soinside.com 2019 - 2024. All rights reserved.