- Как создать графический интерфейс с примерами Swing на Java
- Что такое Swing в Java?
- Контейнерный класс
- Разница между AWT и Swing
- Иерархия
- JButton Class
- JTextField Class
- JScrollBar Class
- JPanel Class
- JMenu Class
- Класс JList
- JLabel Class
- JComboBox Class
- Макет границы
- Макет потока
- GridBag Layout
- Пример: фрейм чата
- Java/Первое окно
- Начнем с простого [ править ]
- Делаем что-то полезное [ править ]
- Дизайн [ править ]
- Скелет программы [ править ]
- Добавляем функциональность [ править ]
- addCrow [ править ]
- removeCrow [ править ]
- updateCrowCounter [ править ]
- Конечный результат [ править ]
- Шаг №45. Создаем оконное приложение на Java для логгера
Как создать графический интерфейс с примерами Swing на Java
Swing в Java является частью базового класса Java, который является независимым от платформы. Он используется для создания оконных приложений и включает в себя такие компоненты, как кнопка, полоса прокрутки, текстовое поле и т. д.
Объединение всех этих компонентов создает графический интерфейс пользователя.
Что такое Swing в Java?
Swing в Java – это легкий инструментарий с графическим интерфейсом, который имеет широкий спектр виджетов для создания оптимизированных оконных приложений. Это часть JFC (Java Foundation Classes). Он построен на основе AWT API и полностью написан на Java. Он не зависит от платформы в отличие от AWT и имеет легкие компоненты.
Создавать приложения становится проще, поскольку у нас уже есть компоненты GUI, такие как кнопка, флажок и т. д.
Контейнерный класс
Любой класс, в котором есть другие компоненты, называется контейнерным классом. Для создания приложений с графическим интерфейсом необходим как минимум один класс контейнеров.
Ниже приведены три типа контейнерных классов:
- Панель – используется для организации компонентов в окне.
- Рамка – полностью функционирующее окно со значками и заголовками.
- Диалог – это как всплывающее окно, но не полностью функциональное, как рамка.
Разница между AWT и Swing
Иерархия
Объяснение: Все компоненты в свинге, такие как JButton, JComboBox, JList, JLabel, унаследованы от класса JComponent, который можно добавить в классы контейнера.
Контейнеры – это окна, такие как рамка и диалоговые окна. Основные компоненты являются строительными блоками любого графического приложения. Такие методы, как setLayout, переопределяют макет по умолчанию в каждом контейнере. Контейнеры, такие как JFrame и JDialog, могут добавлять только компонент к себе. Ниже приведены несколько компонентов с примерами, чтобы понять, как мы можем их использовать.
JButton Class
Он используется для создания помеченной кнопки. Использование ActionListener приведет к некоторым действиям при нажатии кнопки. Он наследует класс AbstractButton и не зависит от платформы.
import javax.swing.*; public class example < public static void main(String args[]) < JFrame a = new JFrame("example"); JButton b = new JButton("click me"); b.setBounds(40,90,85,20); a.add(b); a.setSize(300,300); a.setLayout(null); a.setVisible(true); >>
JTextField Class
Он наследует класс JTextComponent и используется для редактирования однострочного текста.
import javax.swing.*; public class example < public static void main(String args[]) < JFrame a = new JFrame("example"); JTextField b = new JTextField("edureka"); b.setBounds(50,100,200,30); a.add(b); a.setSize(300,300); a.setLayout(null); a.setVisible(true); >>
JScrollBar Class
Он используется для добавления полосы прокрутки, как горизонтальной, так и вертикальной.
import javax.swing.*; class example < example()< JFrame a = new JFrame("example"); JScrollBar b = new JScrollBar(); b.setBounds(90,90,40,90); a.add(b); a.setSize(300,300); a.setLayout(null); a.setVisible(true); >public static void main(String args[]) < new example(); >>
JPanel Class
Он наследует класс JComponent и предоставляет пространство для приложения, которое может присоединить любой другой компонент.
import java.awt.*; import javax.swing.*; public class Example < Example()< JFrame a = new JFrame("example"); JPanel p = new JPanel(); p.setBounds(40,70,200,200); JButton b = new JButton("click me"); b.setBounds(60,50,80,40); p.add(b); a.add(p); a.setSize(400,400); a.setLayout(null); a.setVisible(true); >public static void main(String args[]) < new Example(); >>
JMenu Class
Он наследует класс JMenuItem и является компонентом выпадающего меню, которое отображается из строки меню.
import javax.swing.*; class Example < JMenu menu; JMenuItem a1,a2; Example() < JFrame a = new JFrame("Example"); menu = new JMenu("options"); JMenuBar m1 = new JMenuBar(); a1 = new JMenuItem("example"); a2 = new JMenuItem("example1"); menu.add(a1); menu.add(a2); m1.add(menu); a.setJMenuBar(m1); a.setSize(400,400); a.setLayout(null); a.setVisible(true); >public static void main(String args[]) < new Example(); >>
Вывод:
Класс JList
Он наследует класс JComponent, объект класса JList представляет список текстовых элементов.
import javax.swing.*; public class Example < Example()< JFrame a = new JFrame("example"); DefaultListModell = new DefaultListModel< >(); l.addElement("first item"); l.addElement("second item"); JList b = new JList< >(l); b.setBounds(100,100,75,75); a.add(b); a.setSize(400,400); a.setVisible(true); a.setLayout(null); > public static void main(String args[]) < new Example(); >>
Вывод:
JLabel Class
Используется для размещения текста в контейнере. Он также наследует класс JComponent.
import javax.swing.*; public class Example < public static void main(String args[]) < JFrame a = new JFrame("example"); JLabel b1; b1 = new JLabel("edureka"); b1.setBounds(40,40,90,20); a.add(b1); a.setSize(400,400); a.setLayout(null); a.setVisible(true); >>
Вывод:
JComboBox Class
Он наследует класс JComponent и используется для отображения всплывающего меню выбора.
import javax.swing.*; public class Example< JFrame a; Example()< a = new JFrame("example"); string courses[] = < "core java","advance java", "java servlet">; JComboBox c = new JComboBox(courses); c.setBounds(40,40,90,20); a.add(c); a.setSize(400,400); a.setLayout(null); a.setVisible(true); > public static void main(String args[]) < new Example(); >>
Вывод:
Для размещения компонентов внутри контейнера мы используем менеджер макета. Ниже приведены несколько менеджеров макетов:
Макет границы
Менеджер по умолчанию для каждого JFrame – BorderLayout. Он размещает компоненты в пяти местах: сверху, снизу, слева, справа и по центру.
Макет потока
FlowLayout просто кладет компоненты в ряд один за другим, это менеджер компоновки по умолчанию для каждого JPanel.
GridBag Layout
GridBagLayout размещает компоненты в сетке, что позволяет компонентам охватывать более одной ячейки.
Пример: фрейм чата
import javax.swing.*; import java.awt.*; class Example < public static void main(String args[]) < JFrame frame = new JFrame("Chat Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); JMenuBar ob = new JMenuBar(); JMenu ob1 = new JMenu("FILE"); JMenu ob2 = new JMenu("Help"); ob.add(ob1); ob.add(ob2); JMenuItem m11 = new JMenuItem("Open"); JMenuItem m22 = new JMenuItem("Save as"); ob1.add(m11); ob1.add(m22); JPanel panel = new JPanel(); // the panel is not visible in output JLabel label = new JLabel("Enter Text"); JTextField tf = new JTextField(10); // accepts upto 10 characters JButton send = new JButton("Send"); JButton reset = new JButton("Reset"); panel.add(label); // Components Added using Flow Layout panel.add(label); // Components Added using Flow Layout panel.add(tf); panel.add(send); panel.add(reset); JTextArea ta = new JTextArea(); frame.getContentPane().add(BorderLayout.SOUTH, panel); frame.getContentPane().add(BorderLayout.NORTH, tf); frame.getContentPane().add(BorderLayout.CENTER, ta); frame.setVisible(true); >>
Это простой пример создания GUI с использованием Swing в Java.
Средняя оценка 4.7 / 5. Количество голосов: 137
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Видим, что вы не нашли ответ на свой вопрос.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Java/Первое окно
Так как в большинстве своем сегодняшние начинающие программисты не любят окно командной строки — приведу пример оконного приложения.
Начнем с простого [ править ]
import javax.swing.JFrame; public class MyWindowApp extends JFrame //Наследуя от JFrame мы получаем всю функциональность окна public MyWindowApp() super("My First Window"); //Заголовок окна setBounds(100, 100, 200, 200); //Если не выставить //размер и положение //то окно будет мелкое и незаметное setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //это нужно для того чтобы при //закрытии окна закрывалась и программа, //иначе она останется висеть в процессах > public static void main(String[] args) //эта функция может быть и в другом классе MyWindowApp app = new MyWindowApp(); //Создаем экземпляр нашего приложения app.setVisible(true); //С этого момента приложение запущено! > >
Вот у нас и получилось ничего не делающее приложение!
Делаем что-то полезное [ править ]
Это конечно замечательно уметь показывать пустое окно, но мы хотим, чтобы оно приносило пользу! Создадим форму для подсчета ворон на заборе. Для этого будем отображать текущее количество ворон и с помощью двух кнопок добавлять или вычитать по одной.
Дизайн [ править ]
Это то, что мы примерно хотим увидеть:
Вороносчет | |
Ворон на заборе : 666 | |
Ворона прилетела | Ворона улетела |
Скелет программы [ править ]
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class VoronCalc extends JFrame private int voron = 0; private JLabel countLabel; private JButton addCrow; private JButton removeCrow; public VoronCalc() super("Crow calculator"); //Подготавливаем компоненты объекта countLabel = new JLabel("Crows:" + voron); addCrow = new JButton("Add Crow"); removeCrow = new JButton("Remove Crow"); //Подготавливаем временные компоненты JPanel buttonsPanel = new JPanel(new FlowLayout()); //Расставляем компоненты по местам buttonsPanel.add(countLabel, BorderLayout.NORTH); //О размещении компонент поговорим позже buttonsPanel.add(addCrow); buttonsPanel.add(removeCrow); add(buttonsPanel, BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); > public static void main(String[] args) VoronCalc app = new VoronCalc(); app.setVisible(true); app.pack(); //Эта команда подбирает оптимальный размер в зависимости от содержимого окна > >
После компиляции и запуска — получится что-то такое:
Добавляем функциональность [ править ]
Пришло время добавить немного интерактивности. Нам нужно сделать 3 вещи:
- Научить кнопку addCrow добавлять 1 к переменной voron.
- Научить кнопку removeCrow вычитать 1 из переменной voron.
- Научить countLabel — обновлять свое значение в зависимости от содержимого переменной voron.
addCrow [ править ]
Добавляем listener для кнопки addCrow.
addCrow.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) voron = voron+1; //Добавляем одну ворону countLabel.setText("Crows:" + voron); //Сообщаем приложению, что количество ворон изменилось > >);
removeCrow [ править ]
Добавляем listener для кнопки removeCrow.
removeCrow.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if( voron > 0 ) voron = voron - 1; countLabel.setText("Crows:" + voron); //Сообщаем приложению, что количество ворон изменилось > > >);
updateCrowCounter [ править ]
private void updateCrowCounter() countLabel.setText("Crows:" + voron); >
Конечный результат [ править ]
Шаг №45. Создаем оконное приложение на Java для логгера
Всем привет. Как Вы помните в предыдущей статье мы перешли на язык 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;
public class logWindow extends Frame < /*Создаем подкласс logWindow класса Frame*/
public logWindow () /*Конструктор класса*/
<
super («Логгер»); /*Вызываем конструктор суперкласса и передаем ему параметр, в данном случае имя программы*/
setSize (200,200); /*Метод суперкласса для установкиразмеров окна, в пикселях*/
//Создаем объекты
Button myButton = new Button («Мониторинг»); /*Создаем кнопку и надпись на ней*/
Label myLabel = new Label («Данные логгера»); / Создаем текстовое поле и надпись в нем*/
add (myLabel, BorderLayout.NORTH); /* С помощью менеджера размещения, располагаем текстовое поле в северной части окна*/
add (myButton, BorderLayout.SOUTH); /*Кнопку в южной части*/
myButton.addActionListener (new ActionListener () < /*Для кнопки выбираем событие слушателя, и создаем новое событие в скобках.*/
public void actionPerformed (ActionEvent e) <
myLabel.setText («Мониторинг»); /*Выполняется действие, т.е. при нажатии на кнопку в поле выводится сообщение «Мониторинг» */
>
>);
>
public static void main (String[] args) < //Точка входа программы
logWindow log = new logWindow (); //Создаем объект класса
log.setVisible (true); //Устанавливаем видимость окна
/*Наше окно запускается и отображается, при нажатии на кнопку меняется надпись в текстовом поле. Что бы закрыть окно необходимо добавить код обработки события, который работает следующим образом: мы вызываем для объекта log метод addWindowListener для того, чтобы назначить слушателя оконных событий. В качестве параметра создаем объект абстрактного класса WindowAdapter, в котором создаем класс и переопределяем метод для обработки события закрытия окна — dispose.*/
log.addWindowListener (new WindowAdapter () <
public void windowClosing (WindowEvent e) < // в качестве аргумента передаем событие
e.getWindow ().dispose (); // уничтожает объект Frame
>
>);
>
>
Слева на рисунке внешний вид нашего простого оконного приложения на java. На данный момент нас устроит простое меню с одной кнопкой для дальнейших экспериментов. В следующей статье мы научимся мониторить COM — порт, для приема информации с наших устройств, в данном случае такой же строки, которую мы вывели на терминал в статье №42.
Выше использовалась библиотека awt для построения графического интерфейса. Н иже пример разработки приложения с использованием JavaFX и интеграцию в него в качестве FrontEnd SVG c javascript — ом. Скрины приложения ниже. Полный код по ссылке на GitHub :
Справа скрин анимированного splash screen for java application. Использование заставки с применением JavaFX , SVG c javascript — ом.
Ниже скрин самого приложения с графическим интерфейсом. Описание программы в статье Java Collection for diagnostic software. Step №109 . Полный код по ссылке выше.