我遇到IntelliJ的java gui创建问题。不幸的是,面板背后的大部分代码都隐藏在gui创建者中,而且我不能编辑。
我使用ItelliJ GridLayoutManager创建了一个空白的JPanel“questionPanel”。 当我尝试向该面板添加任何内容时,即使面板绝对不为null,我也会得到一个空指针异常。我也尝试将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
}
是否有人了解幕后发生的事情或者让我将组件放到面板上的方法?感谢。
示例堆栈跟踪(此跟踪不是由与上面相同的代码生成,但它是相同的错误):
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)
.....
答案 0 :(得分:12)
对于使用IntelliJ的GUI创建者并收到相同错误的任何人,我通过在代码中手动设置面板的布局管理器而不是在GUI创建者中选择不同的布局管理器来解决问题。
示例:
questionPane.setLayout(new BoxLayout(questionPane, BoxLayout.PAGE_AXIS));
答案 1 :(得分:2)
我已将此问题作为JetBrains website的错误提交,并收到以下答案:
对于修复NPE,请使用GridLayoutManager GridConstraints将子组件添加到JPanel,如下所示:
panel.add(new JLabel(), new GridConstraints(...))
或使用其他布局。
使用GridConstraints就像使用另一个LayoutManager一样解决了我的问题。
我缩短了&编辑了答案的可读性
答案 2 :(得分:1)
我得到了和你一样的错误。我有一个JPAnel,布局管理器设置为GridLayoutManager Intellij。当我尝试将任何组件添加到此面板时,我得到了例外。
然后我进入GUI编辑器并更改为BorderLayout,一切正常。我不确定为什么它不适合你。
答案 3 :(得分:1)
我有相同的error
,经过一番研究之后,我明白了。问题是,如果JPanel
的{{1}}等于Layout Manager
,则无法将组件添加到JPanel
。
如果您遇到相同的问题。
GridLayoutManager(IntelliJ)
GUI Designer
JPanel
更改为Layout Manager
或GridLayoutManager(IntelliJ)
以外的任何内容或以编程方式
FormLayout(JGoodies)
答案 4 :(得分:0)
Intellij IDEA GUI创建器还允许您将图像作为标签插入。为此,您可以随时随地创建标签,在其配置中,您可以找到并选择图标插槽,您可以在其中选择图像的路径。就是这样!!