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

Обновлено: 02.07.2024

есть ли способ создать JButton с вашей собственной графической кнопкой, а не только с изображением внутри кнопки?

Если нет, есть ли другой способ, чтобы создать пользовательский JButton в java?

  1. создать класс, который расширяет JComponent
  2. вызов родительского конструктора super() in ваши конструкторы
  3. убедитесь, что класс реализует MouseListener
  4. поместите это в конструктор:

  5. переопределить эти методы:

  6. переопределить этот метод:

Я, вероятно, иду на миллион миль в неправильном прямом (но я только молодой :P). но не могли бы вы добавить графику на панель, а затем mouselistener к графическому объекту, чтобы, когда пользователь на графике, ваше действие было предварительно сформировано.

Чтобы создать кнопку, можно инстанцировать одного из многих классов, которые убывают от 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.

Выбирая между Eclipse и Intellij IDEA выбрала второй вариант. Почему второй? Просто в Eclipse уже тыкалась, а об Intellij IDEA узнала из проекта JavaRush. Итак, перед началом работы установила Intellij IDEA 13 и jdk 1.7 JDK (Java Development Kit) - это инструмент для работы с языком Java,в котором есть компилятор, интерпретатор, отладчик и другими инструменты, включает в себя обширнейшую библиотеку классов Java.

Забыла указать самое главное - Цель работы.

Цель работы при изучении основ Java - это создать простое оконное приложение(Frame), в котором будет находиться кнопка(Button) и выполнять какое-то действие.

Перед началом работы познакомилась с существующими компонентами в Java, такими как Label, Button, Panel, TextArea.

Посмотрела как их создают, если сравнить с as3, то принцип такой же, поэтому заострять внимание не стала.

Остался один вопрос. Почему я выбрала пакет awt, а не swing? Да очень просто, когда я читала про java, то там писали про awt.

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

Ну да, в swing есть уже свои навороты, но о них можно будет узнать потом, если потребуется, а сейчас достаточно основ.

Запускаем среду разработки и видим следующее

Quick start

Рисунок 1- Выбор действий

Сначала можно войти в Configure - Settings - и произвести какие-нибудь настройки.

Но на мой взгляд там всё настроено и ничего менять не нужно, поэтому для новичка можно изменить только тему среды.

Для этого внизу смотрим на надпись IDE Settings и первое у меня это Appearance.

Выбираю ее и справа в окне есть выпадающий список Theme.

Меняю, на какую нужно и нажимаю внизу на кнопку OK. Среда перезагрузится и покажет выбранную мной тему.

Возвращаемся к нашим баранам, а точнее к рисунку 1. И как уже показано на картинке, выбираем пункт Создать новый проект. Открывается следующее окно

Project name

Рисунок 2 - New project

Здесь необходимо заполнить поля. Вписываю имя проекта, указываю место, куда сохранить проект и указываю, куда я установила jdk.

Своему проекту дала имя MyFrameButton. Всё заполнила и нажала OK.

Дальше у нас создается и открывается проект. Но для начала работы этого не достаточно. Теперь требуется создать свой первый класс.

java проект

Рисунок 3 - Внешний вид проекта

На рисунке можно увидеть класс FirstProgram. Этот класс был создан мной для работы. Как я это сделала?

Да очень просто. Выбрала папочку src, это видно на рисунке. Открыла контекстное меню и выполнила следующее действие: New - Java Class.

Программа потребовала с меня имя класса, вот я и написала FirstProgram, затем нажала OK и получила поле для работы.

Ну вот, пришло время и покодить.

Кодирование

В созданный класс первым делом в самом вверху написала

Решила в конце указать (* - всё), так как еще не знаю, что мне понадобится от туда.

При кодировании рядом с моей строчкой появились следующие. Я их не писала, они сами вписались.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

public class FirstProgram<>

Я ее немножко дополнила до такой строки

public class FirstProgram extends Frame

public - это модификатор доступности. Так как это имя класса с которым я работаю, то он должен быть у меня доступным (общественным).

После имени класса добавила слово

extends - что означает унаследовать. Мой класс будет наследником класса Frame. На основе этого класса, я буду создавать оконное приложение.

Итак, в буквальном смысле, это звучит так: Общественный класс FirstProgram является потомком класса Frame, что значит, имеет доступ к его свойствам и методам.

При создании программы обратила внимание, что конструктор класса не создается автоматически, отличии от AS3.

Поэтому прописала конструктор класса.

Отмечу, что это конструктор класса, поэтому у него такое же имя как и у класса. Ну и модификатор такой же.

После конструктора добавила статическую точку входа программы.

public static void main(String args[])<>

Как я прочитала, эта точка для запуска программы. А статическая, потому что она одна должна быть во всём проекте.

Модификатор public для того, что бы она была доступна всем в проекте.

Настройка окна приложения

В as3 первым делом вызывали предка, а потом проводили все остальные действия. В Java оказывается тот же принцип и вызывается так же.

Итак, в конструкторе первым делом запишем такие строчки

// вызываем предка, в данном случае Frame и указываем какое имя заголовка будет
setSize(200, 200);

// что бы окно не появлялось маленьким, устанавливаем нужный нам размер.

вид окна

рисунок 4 - Внешний вид окна без параметров

Пора уже определиться с тем, что у нас будет на форме.

Внешний вид

В нижней части экрана располагается кнопка Button, при нажатии на которую будет происходить какое-то действие.

Самое простое действие - это инкремент, т.е увеличение числа на 1.

private int countClick=0;

// переменная счетчик, устанавливаю начальное значение 0
private Button myButton;

// переменная для Кнопки
private Label myText;

// переменная для Текста

В конструкторе класса создаем объекты

myButton = new Button("Hello");

// создаем Кнопку с надписью на ней Hello
myText = new Label("Hello World "+countClick);

// создаем текстовое поле с надписью Hello World и добавляем к нему отображение счетчика

Также нужно учесть расположение объектов на форме. Для этого добавляем следующий код:

// Label будет расположен вверху, что значит на Северной части формы
add(myButton, BorderLayout.SOUTH);

// Button будет расположен внизу, значит на Южной части формы

Но что же будет, если я не напишу расположение. Прикинем на примере myText. Закомментируем его, но оставим для myButton.

В результате я увижу такую форму.

потерялся Label

рисунок 5 - Без Label

Итак, мы видим кнопку с надписью, но текстового поля с надписью на форме нет. Вот так будет выглядеть приложение, если забыть про расположение.

Событие Кнопки

Подходим постепенно к завершению. Как и AS3 оказывается Java тоже использует Слушателя для создания события.

Однако есть отличия. В AS3 я использовала addEventListener, а тут addActionListener.

Итак, события нужно для кнопки, поэтому вешать слушателя нужно кнопки.

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

Таким образом у меня получается вот так.

Ну вот, в AS3 я прописывала свое название события и константу события, а в Java нужно написать создание нового события, т.е new ActionListener.

Выглядит это так

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

Отмечу еще раз, я ее не писала, она САМА автоматически появилась после моей строчки.

@Override
public void actionPerformed(ActionEvent e)

Итак, я вижу, что мне автоматически подготовили место для работы. Поэтому внутри процедуры я впишу следующий свой код.

// увеличиваю переменную на 1
myText.setText("Hello World "+countClick);

// обновляю текст в Label. Решила оставить текст без изменения, но могла бы вместо Hello World написать что-то другое.Так что обновляется только счетчик.
>

// закрываю new ActionListener
);

// закрываю скобку события Слушателя

Ну вот и всё. Код в классе FirstProgram закончился. Осталось прописать код для запуска созданного класса.

Кодируем в Main

FirstProgram myProgram = new FirstProgram();

// создаем объект myProgram своего созданного класса FirstProgram
myProgram.setVisible(true);

// устанавливаем видимость объекта.

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

Оказывается этот функционал подключается отдельно. Так как я всё же хочу закрывать свое окно, то решила подключить и эту функцию .

Закрыть окно

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

Прочитала, что событие WindowClosing отвечает за закрытие окна на крестик. А чтобы окно закрывалось используют команду dispose().

Соединив всю информацию вместе, получила следующий код:

// так как действие должно быть с окном, то вешаем событие на созданный объект.

Принцип работы тот же, что и был, выбираю, прописываю new WindowAdapter() и появляется внизу текст события
@Override
public void windowClosing(WindowEvent e) super.windowClosing(e);

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

в качестве аргумента отправляют Событие(event), с которым нужно дальше работать для реализации метода.

Следуя созданной для меня записи, я написала следующий код
e.getWindow().dispose();

// использую полученное событие, указываю, что мне нужно окно этого события, и указываю, что я хочу с ним сделать, а точнее уничтожить или освободить.
>
>
);


Всем привет. Как Вы помните в предыдущей статье мы перешли на язык Java для написания небольших приложений по обработки данных, на компьютере, полученных с устройств на микроконтроллере. Также мы условились, что дальнейший материал требует знание начального уровня java. Если его нет, то не расстраивайтесь, самые основы похожи на Си, но объектно-ориентированную часть придется подучить. Литературу я приводил в предыдущей статье.

Итак приступим. Сегодня мы создадим оконное приложение (кнопка и текстовое поле) используя фреймворк awt. Также добавим код обработки событий по нажатию на кнопку и закрытия окна. Хочется сказать о том что вариантов написания кода — много, и с помощью какой библиотеки и как создавать приложение решать только Вам. В дальнейшем мы будем работать с данным языком проектируя Android-приложение под умный дом. Ниже приведен код, который выполняет выше описанную задачу.

import java.awt.*; /*Подключаем библиотеку для создания апплетов и независимых
приложений с графическим интерфейсом.*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

Слева на рисунке внешний вид нашего простого оконного приложения на java. На данный момент нас устроит простое меню с одной кнопкой для дальнейших экспериментов. В следующей статье мы научимся мониторить COM — порт, для приема информации с наших устройств, в данном случае такой же строки, которую мы вывели на терминал в статье №42.


Выше использовалась библиотека awt для построения графического интерфейса. В качестве примера, по ссылке, представлено описание приложения с использованием фреймворка JavaFX, а именно написание анимированного splash screen for java application (Слева скрин заставки).

На этом все. Всем пока.


Запись опубликована автором admin137 в рубрике Прикладное программирование на Java с метками awt, Java, кнопка. Добавьте в закладки постоянную ссылку.

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