Прямоугольные кнопки Java Swing Radio? - PullRequest
5 голосов
/ 01 июня 2011

Я хотел бы создать набор кнопок в приложении Java Swing, как в обычной палитре инструментов в программе рисования. То есть набор маленьких квадратных кнопок, каждая из которых содержит значок, при этом нажата только одна из кнопок, а при нажатии другой кнопки первая отменяется. Я подумал о нескольких решениях, и ни одно из них не кажется очень простым / элегантным.

Это звучит как работа для JRadioButton, но если вы добавите в нее иконку, вы все равно получите маленький кружок, который довольно мало места. Я думаю, что вариант будет найти альтернативный внешний вид или код рисования для JRadioButton.

Другой альтернативой может быть добавление JButton в ButtonGroup, возможно, установка JToggleButton.ToggleButtonModel в качестве модели, но это не дает желаемого эффекта, поскольку код рисования для стандартного JButton не сохраняет его нажатым при выборе. Возможно, код JButton можно было бы изменить, чтобы сделать это. Как сделать так, чтобы картина была «выбрана» так же, как «нажата».

Третий вариант - использовать обычный JButton и добавить общий слушатель мыши, который удерживает их нажатыми или нет, и сообщает об изменениях между кнопками.

Может кто-нибудь посоветовать, как лучше всего достичь цели, пожалуйста? Простой метод, который я пропустил, был бы лучшим, но совет, какой из этих трех вариантов был бы лучшим, и указатели на то, как начать работу, также были бы полезны.

Ответы [ 2 ]

9 голосов
/ 01 июня 2011

А как насчет простой JToggleButton в ButtonGroup? Он не абстрактный, вы можете создать его с помощью Icon, и он останется в нажатом состоянии, пока выбран.

1 голос
/ 01 июня 2011

См. Демонстрационный ролик SwingSet2: http://java.sun.com/products/plugin/1.4/demos/jfc/SwingSet2/SwingSet2.html

Щелкните второй значок на панели инструментов (тот, который имеет флажок и переключатель), затем вкладку «Радиокнопки».Затем нажмите «Paint Border» на правой панели в разделе «Параметры отображения».

Исходный код демонстрации находится в каталоге установки JDK, поэтому, например, на моем компьютере он находится в папке \ jdk1.6.0_01 \демо \ JFC \ SwingSet2 \ SRC

...