Java
Самый простой пример оконного приложения, создадим файл Hello_World.java:
import javax.swing.JFrame; class Hello_World extends JFrame { public Hello_World() { setTitle("Hello World"); // Заголовок окна Hello World setSize(640, 480); // Размер окна 640x480 setVisible(true); // Отображаем окно setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется } public static void main(String[] args) { new Hello_World(); // Запуск приложения } }
Теперь давайте откомпилируем, введём следующую команду:
javac Hello_World.java
Теперь давайте запустим наше приложение, введём следующую команду:
java Hello_World
Вы должны увидеть такое окно:
Ошибка код:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется
должен быть до:
setVisible(true); // Отображаем окно
Т.е. так:
import javax.swing.JFrame; class Hello_World extends JFrame { public Hello_World() { setTitle("Hello World"); // Заголовок окна Hello World setSize(640, 480); // Размер окна 640x480 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); // Запуск приложения } }
Давайте теперь наше приложение улучшим, и добавим меню, итак давайте изменим файл Hello_World.java:
import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; class Hello_World extends JFrame { public Hello_World() { setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется JMenuBar bar = new JMenuBar(); // Добавляем менюшки JMenu mnuFile = new JMenu("Файл"); // Добавляем горизонтальное меню Файл mnuFile.setMnemonic('Ф'); JMenuItem popupExit = new JMenuItem("Выход"); // Добавляем вертикальное меню Выход popupExit.setMnemonic('В'); mnuFile.add(popupExit); // Добавляем вертикальное меню в горизонтальное bar.add(mnuFile); // Добавляем горизонтальное меню в вертикальное меню setJMenuBar(bar); // Добавляем менюшки в окно setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); // Запуск приложения } }
Теперь скомпилируем Hello_World.java:
javac -encoding utf8 Hello_World.java
А теперь давайте запустим наше приложение:
java Hello_World
Вуаля наш результат:
Давайте же изменим Hello_World.java:
import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; class Hello_World extends JFrame implements ActionListener{ public Hello_World() { setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется JMenuBar bar = new JMenuBar(); // Добавляем менюшки JMenu mnuFile = new JMenu("Файл"); // Добавляем горизонтальное меню Файл mnuFile.setMnemonic('Ф'); JMenuItem popupExit = new JMenuItem("Выход"); // Добавляем вертикальное меню Выход popupExit.setMnemonic('В'); popupExit.addActionListener(this); // Устанавливаем событие, говорим что обработчик этот класс mnuFile.add(popupExit); // Добавляем вертикальное меню в горизонтальное bar.add(mnuFile); // Добавляем горизонтальное меню в вертикальное меню setJMenuBar(bar); // Добавляем менюшки в окно setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); } public void actionPerformed(ActionEvent e){ System.exit(0); // Если нажали на Файл->Выход, то закрываем приложение } }
Давайте откомпилируем Hello_World.java:
javac -encoding utf8 hello_world.java
Запустим наше приложение:
java Hello_World
Если нажать на выход, теперь наше приложение закроется.
Теперь добавим иконку. Добавим следующую строку:
import java.awt.Toolkit;
и ещё добавим:
setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png")); // Иконка
Полный код Hello_World.java:
import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Toolkit; class Hello_World extends JFrame implements ActionListener{ public Hello_World() { setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png")); // Иконка setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется JMenuBar bar = new JMenuBar(); // Добавляем менюшки JMenu mnuFile = new JMenu("Файл"); // Добавляем горизонтальное меню Файл mnuFile.setMnemonic('Ф'); JMenuItem popupExit = new JMenuItem("Выход"); // Добавляем вертикальное меню Выход popupExit.setMnemonic('В'); popupExit.addActionListener(this); // Устанавливаем событие, говорим что обработчик этот класс mnuFile.add(popupExit); // Добавляем вертикальное меню в горизонтальное bar.add(mnuFile); // Добавляем горизонтальное меню в вертикальное меню setJMenuBar(bar); // Добавляем менюшки в окно setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); } public void actionPerformed(ActionEvent e){ System.exit(0); // Если нажали на Файл->Выход, то закрываем приложение } }
Теперь давайте нарисуем такую иконку X в Paint-е:
1. Запустим программу Paint:
2. Нажмём Strg+E и измен размер картинки 32 на 32:
3. Нарисуем букву X:
4. Сохраним как png, имя файла должно быть icon.png:
5. Теперь откомпилируем Hello_World.java:
javac -encoding utf8 hello_world.java
6. И запустим:
java Hello_World
7. Вуаля вот и результат:
Теперь улучшим нашу программу, добавим панельку toolbar. Итак погнали. Панельку toolbar я буду иметь ввиду что это панель управления. Подключим библиотеки:
import javax.swing.JButton; import java.awt.BorderLayout; import javax.swing.JToolBar;
Изменим код:
class Hello_World extends JFrame implements ActionListener{ JMenuItem popupExit; JButton btnDemo;
Добавим код:
setLayout(new BorderLayout()); // Добавим BorderLayout JToolBar toolbar = new JToolBar("Главная панель"); // Добавляем панельку Toolbar, и добавляем названия панельки toolbar.setFloatable(true); // Стиль панельки toolbar - подвижная toolbar.setRollover(true); // визуально указать на кнопки на панельки toolbar, когда пользователь передает по ним с курсором btnDemo = new JButton("Выход"); // Добавляем кнопку с названием выход toolbar.add(btnDemo); add(toolbar, BorderLayout.NORTH);
Изменим код:
public void actionPerformed(ActionEvent e){ if(e.getSource() == popupExit || e.getSource() == btnDemo) System.exit(0); // Если нажали на Файл->Выход или на кнопку на панели выход, то закрываем приложение }
Полный код:
import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Toolkit; import javax.swing.JButton; import java.awt.BorderLayout; import javax.swing.JToolBar; class Hello_World extends JFrame implements ActionListener{ JMenuItem popupExit; JButton btnDemo; public Hello_World() { setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png")); // Иконка setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется JMenuBar bar = new JMenuBar(); // Добавляем менюшки JMenu mnuFile = new JMenu("Файл"); // Добавляем горизонтальное меню Файл mnuFile.setMnemonic('Ф'); popupExit = new JMenuItem("Выход"); // Добавляем вертикальное меню Выход popupExit.setMnemonic('В'); popupExit.addActionListener(this); // Устанавливаем событие, говорим что обработчик этот класс mnuFile.add(popupExit); // Добавляем вертикальное меню в горизонтальное bar.add(mnuFile); // Добавляем горизонтальное меню в вертикальное меню setJMenuBar(bar); // Добавляем менюшки в окно setLayout(new BorderLayout()); // Добавим BorderLayout JToolBar toolbar = new JToolBar("Главная панель"); // Добавляем панельку toolbar, и добавляем названия панельки toolbar.setFloatable(true); // Стиль панельки toolbar - подвижная toolbar.setRollover(true); // визуально указать на кнопки на панельки toolbar, когда пользователь передает по ним с курсором btnDemo = new JButton("Выход"); // Добавляем кнопку с названием выход toolbar.add(btnDemo); // Добавляем кнопку в панельку toolbar add(toolbar, BorderLayout.NORTH); // Добавляем панельку toolbar в окно, говорим что панелька будет вверху setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); } public void actionPerformed(ActionEvent e){ if(e.getSource() == popupExit || e.getSource() == btnDemo) System.exit(0); // Если нажали на Файл->Выход или на кнопку на панели выход, то закрываем приложение } }
Теперь откомпилируем нашу программу и запустим:
Компиляция:
javac -encoding utf8 Hello_World.java
Запуск:
java Hello_World
Вуаля! Вот результат работы нашей программы:
Теперь давайте улучшим наш код, и добавим в панель управления (панелька toolbar) иконочку, будем добавлять эту иконку в нашу панельку:
Добавим библиотеки:
import javax.swing.ImageIcon; import javax.imageio.ImageIO;
Добавим картинку в кнопку:
// Обработчик исключения try { btnExit.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("icon.png")))); // Добавляем иконку (картинку) в кнопку btnExit } catch(Exception ex) {}
Полный код:
import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Toolkit; import javax.swing.JButton; import java.awt.BorderLayout; import javax.swing.JToolBar; import javax.swing.ImageIcon; import javax.imageio.ImageIO; class Hello_World extends JFrame implements ActionListener { JMenuItem popupExit; JButton btnExit; public Hello_World() { setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png")); // Иконка setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // При закрытие приложение закроется JMenuBar bar = new JMenuBar(); // Добавляем менюшки JMenu mnuFile = new JMenu("Файл"); // Добавляем горизонтальное меню Файл mnuFile.setMnemonic('Ф'); popupExit = new JMenuItem("Выход"); // Добавляем вертикальное меню Выход popupExit.setMnemonic('В'); popupExit.addActionListener(this); // Устанавливаем событие, говорим что обработчик этот класс mnuFile.add(popupExit); // Добавляем вертикальное меню в горизонтальное bar.add(mnuFile); // Добавляем горизонтальное меню в вертикальное меню setJMenuBar(bar); // Добавляем менюшки в окно setLayout(new BorderLayout()); // Добавим BorderLayout JToolBar toolbar = new JToolBar("Главная панель"); // Добавляем панельку Toolbar, и добавляем названия панельки toolbar.setFloatable(true); toolbar.setRollover(true); btnExit = new JButton(); // Добавляем кнопку // Обработчик исключения try { btnExit.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("icon.png")))); // Добавляем иконку (картинку) в кнопку btnExit } catch(Exception ex) {} toolbar.add(btnExit); add(toolbar, BorderLayout.NORTH); setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); } public void actionPerformed(ActionEvent e){ if(e.getSource() == popupExit || e.getSource() == btnExit) System.exit(0); // Если нажали на Файл->Выход или на кнопку на панели выход, то закрываем приложение } }
Теперь откомпилируем:
javac -encoding utf8 Hello_World.java
И запустим:
java Hello_World
Вуаля вот и результат:
Теперь давайте нарисуем свою иконку, дверь:
1. Нарисуем дверь в Microsoft Pain:
2. Сохраним как button_exit.png
3. Сделаем прозрачный PNG:
3.1. Запустим Corel PaintShop Photo Pro:
3.2. Чтобы сохранить прозрачный PNG, нажмём на Exportieren->PNG-Optimierung...:
3.3. Укажем что белый цвет это прозрачный:
3.3. Сохраним как button_exit.png:
Вот сама картиночка:
4. Теперь изменим код:
btnExit.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("button_exit.png")))); // Добавляем иконку (картинку) в кнопку btnExit
5. Теперь откомпилируем код, и запустим программу. Вуаля дверка на кнопки:
Ошибку допустил, я совсем забыл поставить обработчик события на панельку, чтобы срабатывало событие при нажатие на кнопку дверь, нужно добавить код:
btnExit = new JButton(); // Добавляем кнопку btnExit.addActionListener(this); // Добавляем событие, при нажатие мышью на кнопку
Добавим чтобы при нажатие на выход, чтобы отображалось диалоговое окно, и приложение спрашивало о завершение сеанса:
Добавим библиотеки:
import javax.swing.JOptionPane; import java.awt.event.WindowEvent;
Изменим код:
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // При закрытие приложения сработает событие processWindowEvent
Добавим код:
private void closeDialog() { // Отображаем диалоговое окно, которое будет спрашивать выйти или нет int result = JOptionPane.showConfirmDialog(this, "Вы уверены что вы хотите выйти из приложения?", "Завершение сеанса", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); // Если нажали на Yes (да) то выходим if(result == JOptionPane.YES_OPTION) System.exit(0); // Закрываем приложение } // Если нажали на ... protected void processWindowEvent(WindowEvent e) { // Если нажали на X if(e.getID() == WindowEvent.WINDOW_CLOSING) { closeDialog(); // Выходим } }
Изменим код:
public void actionPerformed(ActionEvent e){ // Если нажали на Выход (Файл->Выход, или кнопку с иконкой двери на панельки if(e.getSource() == popupExit || e.getSource() == btnExit) { closeDialog(); // Выходим } }
Полный код Hello_World.java:
import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Toolkit; import javax.swing.JButton; import java.awt.BorderLayout; import javax.swing.JToolBar; import javax.swing.ImageIcon; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import java.awt.event.WindowEvent; class Hello_World extends JFrame implements ActionListener { JMenuItem popupExit; JButton btnExit; public Hello_World() { setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png")); // Иконка setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // При закрытие приложение сработает событие processWindowEvent JMenuBar bar = new JMenuBar(); // Добавляем менюшки JMenu mnuFile = new JMenu("Файл"); // Добавляем горизонтальное меню Файл mnuFile.setMnemonic('Ф'); popupExit = new JMenuItem("Выход"); // Добавляем вертикальное меню Выход popupExit.setMnemonic('В'); popupExit.addActionListener(this); // Устанавливаем событие, говорим что обработчик этот класс mnuFile.add(popupExit); // Добавляем вертикальное меню в горизонтальное bar.add(mnuFile); // Добавляем горизонтальное меню в вертикальное меню setJMenuBar(bar); // Добавляем менюшки в окно setLayout(new BorderLayout()); // Добавим BorderLayout JToolBar toolbar = new JToolBar("Главная панель"); // Добавляем панельку Toolbar, и добавляем названия панельки toolbar.setFloatable(true); toolbar.setRollover(true); btnExit = new JButton(); // Добавляем кнопку btnExit.addActionListener(this); // Обработчик исключения try { btnExit.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("button_exit.png")))); // Добавляем иконку (картинку) в кнопку btnExit } catch(Exception ex) {} toolbar.add(btnExit); add(toolbar, BorderLayout.NORTH); setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); } private void closeDialog() { // Отображаем диалоговое окно, которое будет спрашивать выйти или нет int result = JOptionPane.showConfirmDialog(this, "Вы уверены что вы хотите выйти из приложения?", "Завершение сеанса", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); // Если нажали на Yes (да) то выходим if(result == JOptionPane.YES_OPTION) System.exit(0); // Если нажали на Файл->Выход или на кнопку на панели выход, то закрываем приложение } // Если нажали на ... protected void processWindowEvent(WindowEvent e) { // Если нажали на X if(e.getID() == WindowEvent.WINDOW_CLOSING) { closeDialog(); // Выходим } } public void actionPerformed(ActionEvent e){ // Если нажали на Выход (Файл->Выход, или кнопку с иконкой двери на панельки if(e.getSource() == popupExit || e.getSource() == btnExit) { closeDialog(); // Выходим } } }
Давайте улучшим год, и нарисуем прозрачный круг красного цвета:
Подключим библиотеку:
import java.awt.Graphics; import javax.swing.JPanel; import java.awt.Color;
Добавим в код класс DrawPanel:
class DrawPanel extends JPanel { // Событие рисования public void paintComponent(Graphics g) { super.paintComponent(g); // Передаём чтобы перерисовалось g.setColor(Color.RED); // Устанавливаем красные линии g.drawArc(10, 10, 100, 100, 0, 360); // Рисуем окружность красного цвета, но с прозрачным фоном } }
Вызовим наш класс DrawPanel:
DrawPanel panel = new DrawPanel(); add(panel); setVisible(true); // Отображаем окно
Полный код Hello_World.java:
import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Toolkit; import javax.swing.JButton; import java.awt.BorderLayout; import javax.swing.JToolBar; import javax.swing.ImageIcon; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import java.awt.event.WindowEvent; import java.awt.Graphics; import javax.swing.JPanel; import java.awt.Color; class Hello_World extends JFrame implements ActionListener { JMenuItem popupExit; JButton btnExit; class DrawPanel extends JPanel { // Событие рисования public void paintComponent(Graphics g) { super.paintComponent(g); // Передаём чтобы перерисовалось g.setColor(Color.RED); // Устанавливаем красные линии g.drawArc(10, 10, 100, 100, 0, 360); // Рисуем окружность красного цвета, но с прозрачным фоном } } public Hello_World() { setTitle("Простое приложение"); // Заголовок окна Простое приложение setSize(640, 480); // Размер окна 640x480 setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png")); // Иконка setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // При закрытие приложение сработает событие processWindowEvent JMenuBar bar = new JMenuBar(); // Добавляем менюшки JMenu mnuFile = new JMenu("Файл"); // Добавляем горизонтальное меню Файл mnuFile.setMnemonic('Ф'); popupExit = new JMenuItem("Выход"); // Добавляем вертикальное меню Выход popupExit.setMnemonic('В'); popupExit.addActionListener(this); // Устанавливаем событие, говорим что обработчик этот класс mnuFile.add(popupExit); // Добавляем вертикальное меню в горизонтальное bar.add(mnuFile); // Добавляем горизонтальное меню в вертикальное меню setJMenuBar(bar); // Добавляем менюшки в окно setLayout(new BorderLayout()); // Добавим BorderLayout JToolBar toolbar = new JToolBar("Главная панель"); // Добавляем панельку Toolbar, и добавляем названия панельки toolbar.setFloatable(true); toolbar.setRollover(true); btnExit = new JButton(); // Добавляем кнопку btnExit.addActionListener(this); // Обработчик исключения try { btnExit.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("button_exit.png")))); // Добавляем иконку (картинку) в кнопку btnExit } catch(Exception ex) {} toolbar.add(btnExit); add(toolbar, BorderLayout.NORTH); DrawPanel panel = new DrawPanel(); add(panel); setVisible(true); // Отображаем окно } public static void main(String[] args) { new Hello_World(); } private void closeDialog() { // Отображаем диалоговое окно, которое будет спрашивать выйти или нет int result = JOptionPane.showConfirmDialog(this, "Вы уверены что вы хотите выйти из приложения?", "Завершение сеанса", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); // Если нажали на Yes (да) то выходим if(result == JOptionPane.YES_OPTION) System.exit(0); // Если нажали на Файл->Выход или на кнопку на панели выход, то закрываем приложение } // Если нажали на ... protected void processWindowEvent(WindowEvent e) { // Если нажали на X if(e.getID() == WindowEvent.WINDOW_CLOSING) { closeDialog(); // Выходим } } public void actionPerformed(ActionEvent e){ // Если нажали на Выход (Файл->Выход, или кнопку с иконкой двери на панельки if(e.getSource() == popupExit || e.getSource() == btnExit) { closeDialog(); // Выходим } } }