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

des4xlb0  于 2022-11-27  发布在  Java
关注(0)|答案(3)|浏览(292)

我正在试用intellij,并且正在尝试做一些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()方法是非常简单的。2然而,在编译时,我收到了以下错误:

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时从未遇到过这个问题。

ca1c2owp

ca1c2owp1#

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

bfnvny8b

bfnvny8b2#

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

py49o6xq

py49o6xq3#

您需要确保设置面板的字段名称。您可能误解了以下行:
(新建视图().panel);
在这段代码中,new View().panel实际上是试图用字段名初始化对象。因此,如果panel没有这个名称......很明显,你试图示例化的东西并不存在。
我在jform编辑器的字段名称属性下命名了JPanel MainPanel,并写道:
(新建视图().主面板);

相关问题