JRadioButton itemlistener не стреляет - PullRequest
1 голос
/ 23 февраля 2011

Здравствуйте, мой Japplet использует JComboBox и 5 JRadioButtons для рисования и рисования на апплете.В настоящее время все работает, за исключением моего JRadioButtons, который не вызывает itemStateChanged (), когда кнопка выбрана.Поэтому в апплете я могу нажать на кнопку, но она не сработает.Мой комбинированный список также использует интерфейс itemlistener, и он работает, но независимо от того, что я пробовал, я не могу получить кнопки для отправки информации / запуска.

Я заметил, что для выбора кнопки требуется два щелчкаи надеюсь, что проблема заключается в этом.

Это для домашней задачи, и если бы я мог использовать actionperformed и actionlistener, я бы :(. Мне нужно использовать itemlistener. Ниже приведены примеры того, как я вызываю свои радиокнопки, добавляя их в группу фигур.и добавление кнопок к контейнеру c.

Спасибо за любую помощь!

Извините всех, кто читает это, но так как это было домашнее задание, я не уверен на 100%, что могу сохранить код, PM мне, если вам нужна помощь, чтобы понять это!

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Код, который вы опубликовали, НЕ является SSCCE!

Ваш вопрос касается ItemListener, так почему вы опубликовали код, связанный с MouseListener и MouseMotionListener? Какое отношение имеет пользовательский код рисования к вашей проблеме?

Откуда вы знаете, что код ItemListener не вызывается? Вы добавили оператор System.out.println (...) в код слушателя? Сначала проверьте свой код, используя «appletviewer». Это проще, чем с помощью браузера. Все, что вы делаете из командной строки:

appletviewer P6.html

Или мне проще протестировать апплет, даже не создавая HTML-файл. Вы можете добавить следующую строку кода в начало вашего исходного файла:

// <applet code="P6.class" width="800" height="600"></applet>

Теперь с помощью команды вы можете протестировать апплет, просто используя:

appletviewer P6.java

Проблема с вашим кодом в том, что ваши переключатели определены как классовые и локальные переменные. ItemListener генерирует исключение NullPointerException, поскольку переменные класса имеют значение null.

JRadioButton jrbOval = new JRadioButton("Oval");    

должно быть:

jrbOval = new JRadioButton("Oval");    

Кроме того, вы не должны переопределять метод paint () в JApplet. Настраиваемое рисование выполняется путем переопределения метода paintComponent () в JPanel. Затем вы добавляете панель к апплету.

1 голос
/ 23 февраля 2011

В общем случае, использовать класс Applet для такого большого количества слушателей - плохая идея. Это только добавляет путаницы, и теперь у вас есть объект Бога, который обрабатывает слишком много событий. Смотрите это обсуждение для получения дополнительной информации:

Преимущества для вложенных классов для слушателей в графических интерфейсах

Вторая проблема заключается в том, что вы сильно смешиваете объекты java.awt и javax.swing, которые, как известно, вызывают проблемы, когда они помещаются в один и тот же контейнер. Вам определенно следует попытаться разделить ваш апплет на 2 JPanels, один для элементов awt (краски, фигуры и т. Д.) И один для элементов свинга (кнопок, блоков и т. Д.).

Кажется, вы правильно используете класс ItemListener, но когда я увидел, что для выбора кнопки требуется два щелчка, это было явным признаком проблем с перемешиванием / рисованием wt / swing.

...