Как сделать круглую кнопку в java

Обновлено: 25.06.2024

Каждое приложение, которое имеет графический интерфейс пользователя не может обходиться без кнопок. В Java Swing кнопка представлена классом JButton. У кнопки имеются различные методы для ее конфигурирования — установка надписи на JButton, установка иконки, выравнивание текста, установка размеров и так далее. Кроме всего прочего разработчику необходимо навесить на JButton слушателя, который будет выполняться как только пользователь нажмет на кнопку. Как это сделать? Поговорим об этом ниже.

Ранее я писал, что все взаимодействия пользователя с приложением основано на событиях. Не является исключением и JButton. Как только пользователь нажимает кнопку, создается ActionEvent событие, которое передается слушателям кнопки. Для того, чтобы организовать слушателя Swing предоставляет интерфейс ActionListener, который необходимо реализовать. Интерфейс ActionListener требует только реализации одного метода — actionPerformed. Пример класса, реализующего интерфейс ActionListener представлен ниже.

После того, как обработчик создан, его необходимо добавить к кнопке. Делается это при помощи метода addActionListener. В качестве параметра методу передается обработчик. Например, это можно сделать вот так:

Здесь мы создаем сначала кнопку. Потом создаем экземпляр нашего слушателя TestActionListener, а затем добавляем его в качестве слушателя к кнопке с помощью вызова addActionListener и передаем ему экземпляр обработчика. Вообще слушателей может быть неопределенное количество. Если нам будет необходимо два или более слушателей, которые должны будут по-разному реагировать на нажатие кнопки, то для каждого из них вызовем addActionListener. Кроме того может когда-нибудь понадобиться отключить слушателя и сказать ему, чтобы он больше не прослушивал нажатие кнопки. Это можно сделать при помощи метода removeActionListener. Сюда в качестве параметра придется передать ссылку на слушателя, которого хотим удалить из списка слушателей кнопки JButton.

Ну и напоследок пример приложения для демонстрации обработчиков нажатия кнопки JButton.

Стоит сказать про несколько интересных на мой взгляд моментов. Первый — это использование action command. Можно заметить, что у кнопок вызывается метод setActionCommand, в который для каждой кнопки передает своё строковое значение. Таким образом в приложении можно понять, какая именно кнопка была нажата, если обработку нажатия нескольких кнопок выполняет один слушатель. Для того, чтобы узнать это у ActionEvent берется action command с помощью метода getActionCommand.

Второй момент — для обработки события нажатия кнопки JButton можно создать анонимный класс, который реализует интерфейс ActionListener. Это можно наблюдать вот здесь:

Чтобы создать кнопку, можно инстанцировать одного из многих классов, которые убывают от AbstractButton class. Следующая таблица показывает определенный с помощью Swing AbstractButton подклассы, которые Вы могли бы хотеть использовать:

Класс Сводка Где Описано
JButton Общая кнопка. Как Использовать Общий API Кнопки и Как Использовать Функции JButton
JCheckBox Кнопка флажка. Как Использовать Флажки
JRadioButton Одна из группы переключателей. Как Использовать Переключатели
JMenuItem Элемент в меню. Как Использовать Меню
JCheckBoxMenuItem Пункт меню, у которого есть флажок. Как Использовать Меню и Как Использовать Флажки
JRadioButtonMenuItem Пункт меню, у которого есть переключатель. Как Использовать Меню и Как Использовать Переключатели
JToggleButton Реализации переключают функциональность, наследованную JCheckBox и JRadioButton . Может быть инстанцирован или разделен на подклассы, чтобы создать кнопки с двумя состояниями. Используемый в некоторых примерах

Отметьте: Если Вы хотите забрать группу кнопок в строку или столбец, то следует проверить панели инструментов.

Во-первых, этот раздел объясняет основной API кнопки это AbstractButton определяет — и таким образом все кнопки Swing имеют вместе. Затем, это описывает небольшое количество API это JButton добавляет к AbstractButton . После этого этот раздел показывает Вам, как использовать специализированный API, чтобы реализовать флажки и переключатели.

Как Использовать Общий API Кнопки

Вот изображение приложения, которое выводит на экран три кнопки:

Run ButtonDemo ( download JDK 6 or later ). Or, to compile and run the example yourself, consult the example index. -->

Как ButtonDemo шоу в качестве примера, кнопка Swing может вывести на экран и текст и изображение. В ButtonDemo , у каждой кнопки есть свой текст в различном месте относительно ее изображения. Подчеркнутая буква в тексте каждой кнопки показывает мнемосхему — альтернативу клавиатуры — для каждой кнопки. В большинстве взгляда и чувств, пользователь может нажать кнопку, нажимая клавишу Alt и мнемосхему. Например, Alt-M нажал бы кнопку Middle в ButtonDemo.

Когда кнопка отключается, стиль автоматически генерирует отключенное появление кнопки. Однако, Вы могли обеспечить изображение, которое будет заменено нормальное изображение. Например, Вы могли обеспечить серые версии изображений, используемых в левых и правых кнопках.

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

Ниже код от ButtonDemo.java это создает кнопки в предыдущем примере и реагирует на нажатия кнопок. Полужирный код является кодом, который остался бы, если бы у кнопок не было никаких изображений.

Как Использовать Функции JButton

Обычные кнопки — JButton у объектов — есть только немного больше функциональности чем AbstractButton class обеспечивает: можно сделать a JButton будьте кнопкой значения по умолчанию.

Самое большее одна кнопка в высокоуровневом контейнере может быть кнопкой значения по умолчанию. У кнопки значения по умолчанию обычно есть выделенное появление и действия, по которым щелкают всякий раз, когда у высокоуровневого контейнера есть клавиатурный фокус, и пользователь нажимает клавишу Return или клавишу Enter. Вот изображение диалогового окна, реализованного в примере ListDialog, в котором кнопка Set является кнопкой значения по умолчанию:

Во Взгляде Java & Чувстве, у кнопки значения по умолчанию есть тяжелая граница

Вы устанавливаете кнопку значения по умолчанию, вызывая setDefaultButton метод на высокоуровневой корневой области контейнера. Вот код, который устанавливает кнопку значения по умолчанию для ListDialog пример:

Точная реализация функции кнопки значения по умолчанию зависит от стили. Например, в стили Windows, кнопка значения по умолчанию изменяется на то, какой бы ни у кнопки есть фокус, так, чтобы нажатие Вошло, нажимает фокусируемую кнопку. Когда ни у какой кнопки нет фокуса, кнопка, которую Вы первоначально определили, поскольку кнопка значения по умолчанию становится кнопкой значения по умолчанию снова.

Как Использовать Флажки

JCheckBox class оказывает поддержку для кнопок флажка. Можно также поместить флажки в меню, используя JCheckBoxMenuItem class. Поскольку JCheckBox и JCheckBoxMenuItem наследуйтесь от AbstractButton , У флажков Swing есть все обычные характеристики кнопки, как обсуждено ранее в этом разделе. Например, можно определить изображения, которые будут использоваться во флажках.

Флажки подобны переключателям, но их модель выбора отличается, условно. Любое число флажков в группе — ни одного, некоторых, или всех — не может быть выбрано. У группы переключателей, с другой стороны, может быть только одна нажатая кнопка.

Вот изображение приложения, которое использует четыре флажка, чтобы настроить мультфильм:

НЕ учебный читатель!

Run CheckBoxDemo ( download JDK 6 or later ). Or, to compile and run the example yourself, consult the example index. -->

Флажок генерирует одно событие элемента и одно событие действия на щелчок. Обычно, Вы слушаете только для событий элемента, так как они позволяют Вам определять, снял ли выбранный щелчок или флажок. Ниже код от CheckBoxDemo.java это создает флажки в предыдущем примере и реагирует на щелчки.

Как Использовать Переключатели

Переключатели являются группами кнопок, в которых, условно, за один раз может быть нажата только одна кнопка. Выпуск Swing поддерживает переключатели с JRadioButton и ButtonGroup классы. Чтобы поместить переключатель в меню, используйте JRadioButtonMenuItem class. Другими способами вывести на экран варианты "один из многих" являются поля комбинированного списка и списки. Переключатели выглядят подобными флажкам, но, условно, флажки не устанавливают границ того, сколько элементов может быть выбрано за один раз.

Поскольку JRadioButton наследовался от AbstractButton , У переключателей Swing есть все обычные характеристики кнопки, как обсуждено ранее в этом разделе. Например, можно определить изображение, выведенное на экран в переключателе.

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

Каждый раз пользователь щелкает по переключателю (даже если он был уже выбран), кнопка запускает событие действия. Одно или два события элемента также имеют место — один от кнопки, которая была только нажата, и другой от кнопки, которая потеряла выбор (если любой). Обычно, Вы обрабатываете щелчки переключателя, используя слушателя действия.

Ниже код от RadioButtonDemo.java это создает переключатели в предыдущем примере и реагирует на щелчки.

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

Следует обычно инициализировать группу переключателей так, чтобы каждый был выбран. Однако, API не осуществляет это правило — у группы переключателей не может быть никакого начального выбора. Как только пользователь сделал выбор, точно одна кнопка нажимается с тех пор.

API Кнопки

Следующие таблицы приводят обычно используемый связанный с кнопкой API. Другие методы Вы могли бы вызвать, такой как setFont и setForeground , перечисляются в таблицах API в Классе JComponent.

API для того, чтобы использовать кнопки попадает в эти категории:

Примеры, который Использование Различные Виды Кнопок

Следующие примеры используют кнопки. Также см. Примеры, что Панели инструментов Использования, который перечисляет программы, которые добавляют JButton объекты к JToolBar s.

Swing KeyListener, слушаем нажатия клавиш

Для прослушивания нажатий клавиш, существует специальный интерфейс KeyListener:

Каждый метод, реализованный интерфейсом KeyListener, вызывается определенным событием, вместе с которым передается экземпляр KeyEvent. KeyEvent содержит в себе всю информацию о нажатой клавише и о модификаторах, таких как Alt, Ctrl, Shift:

Дополнительно про KeyEvent можно почитать тут.

У каждой клавиши есть свой цифровой код, например, код пробела 32, клавиша вправо имеет код 39. Всегда можно посмотреть эти коды, выполнив команду:

Кроме того, класс KeyEvent содержит коды всех клавиш в статических переменных, все они начинаются на VK_

Можно и нужно использовать эти переменные для сравнения:

Короткие нажатия

Когда дело касается только обработки нажатой клавиши, достаточно поместить необходимый код в метод keyTyped() интерфейса KeyListener.

Длинные одновременные нажатия

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

Такой подход позволяет реализовывать составные действия, например, длительное движение вправо-вверх одновременно. Необходимо правильно отлавливать события с клавиатуры. Когда зажата клавиша, мы получаем событие в метод keyPressed и записываем эту информацию в переменную. С этого момента мы считаем, что клавиша непрерывно нажата. Если клавиша будет отпущена, мы получим событие в метод keyReleased и обновим об этом информацию в переменной.

Некий движок, управляющий нашей программой и живущий в отдельном потоке не слушает нажатия клавиш напрямую. Вместо этого, он работает с переменными, которые мы любезно для него подготовили.

Подключаем слушатель

Остается только повесить наш класс слушателя нажатий на какой-нибудь компонент Swing, например на JFrame:

Живой пример

Перед вами код, реализующий отрисовку змейки. Голова управляется "стрелками".



Здесь переменную balance мы сделали атрибутом класса, чтобы к ней можно было обратиться из метода этого класса. По аналогичной причине мы поместили лейбл balanceLabel в атрибут класса, и это нам позволило обратиться к нему из метода updateBalance().
На кнопку btnIncrease мы установили слушатель событий посредством создания экземпляра класса ActionListener, в котором переопределили метод actionPerformed.

Читайте также: