Intellij,“contentPane 不能设置为 null”,使用 swing 设计器
Posted
技术标签:
【中文标题】Intellij,“contentPane 不能设置为 null”,使用 swing 设计器【英文标题】:Intellij, "contentPane cannot be set to null" using swing designer 【发布时间】:2018-07-22 00:42:30 【问题描述】:我正在尝试 intellij,并且正在尝试进行一些摇摆开发。我遇到了一个我在 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,这就是它为空的原因。
我尝试在 run (panel = new JPanel();) 中自己实例化它,但这没有帮助。
这很明显吗?在eclipse中开始使用swing时,我从未遇到过这个问题。
【问题讨论】:
简单的答案是,panel
永远不会被初始化。越长越复杂(感谢 intellij 的表单编辑器——我从来没有真正弄清楚这件事是如何工作的)。除非您愿意花更多时间阅读 intellij 的表单编辑器教程,否则我个人会放弃它并学习手动编写 UI 代码
我知道面板从未初始化。我什至尝试手动初始化它,但没有效果。
“什么时候”你尝试初始化它?在frame.setContentPane(new View().panel);
之前还是之后?在您的示例中,它需要在 View
的构造函数中初始化
您是否将 .java 移至另一个包?
【参考方案1】:
您需要确保设置面板的字段名称。您可能误解了以下行:
frame.setContentPane(new View().panel);
在这段代码中,new View().panel 真正尝试使用字段名称初始化对象。因此,如果面板没有该名称...显然您正在尝试实例化不存在的东西。
我在 jform 编辑器的字段名称属性下将我的 JPanel MainPanel 命名为:
frame.setContentPane(new View().MainPanel);
【讨论】:
【参考方案2】:尝试在 Intellij IDEA 中启用“UI Designer”插件,这对我有帮助。 文件 -> 设置 -> 插件 -> UI Designer -> 重启 IDE
【讨论】:
【参考方案3】:您正在将面板“panel”设置为 JFrame 的内容窗格,但您正在创建的 JPanel 称为“panel1”。要解决此问题,请将 JPanel 的名称更改为 'panel' 而不是 'panel1'。
【讨论】:
以上是关于Intellij,“contentPane 不能设置为 null”,使用 swing 设计器的主要内容,如果未能解决你的问题,请参考以下文章