Создатель графического интерфейса IntelliJ: JPanel выдает исключение нулевого указателя во время выполнения при добавлении любого компонента - PullRequest
10 голосов
/ 09 марта 2012

У меня проблема с созданием Java-интерфейса IntelliJ.К сожалению, большая часть кода за панелью скрыта внутри создателя графического интерфейса и не редактируется мной.

Я создал пустой JPanel «questionPanel» с помощью ItelliJ GridLayoutManager.Когда я пытаюсь добавить что-либо в эту панель, я получаю исключение нулевого указателя, даже если панель определенно не равна нулю.Я также попытался добавить 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)
.....

Ответы [ 4 ]

13 голосов
/ 15 мая 2012

Для тех, кто использует создатель графического интерфейса IntelliJ и получает ту же ошибку, я исправил эту проблему, вручную установив диспетчер компоновки панели в коде вместо выбора других диспетчеров компоновки в создателе графического интерфейса.

Пример:

questionPane.setLayout(new BoxLayout(questionPane, BoxLayout.PAGE_AXIS));
2 голосов
/ 16 февраля 2016

Я зарегистрировал проблему как ошибку на сайте JetBrains и получил следующий ответ:

Для исправления NPE добавьте дочерний компонент в JPanel с помощью GridLayoutManager с GridConstraints, например:

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

или используйте другой макет.

Использование GridConstraints решило проблему для меня так же, как использование другого LayoutManager.

Я сократил и отредактировал ответ для удобства чтения

1 голос
/ 04 июля 2015

Я получил ту же ошибку, что и вы.У меня есть JPanel с менеджером макета, установленным в GridLayoutManager Intellij.Когда я пытался добавить какой-либо компонент в эту панель, я получал исключение.

Затем я зашел в редактор графического интерфейса и переключился на BorderLayout, и все работало нормально.Я не уверен, почему это не работает для вас.

0 голосов
/ 26 ноября 2014

Создатель графического интерфейса Intellij IDEA также позволяет вставлять изображения в качестве меток. Для этого создайте ярлык где угодно, и в его конфигурациях вы найдете слот для значков, где вы выберете путь к своему изображению. И это все !!

...