Темы графического интерфейса в Java
При создании программ на Java, которые используют графический интерфейс для взаимодействия с пользователем, среда Java по-умолчанию предоставляет разработчику несколько версий тем графического интерфейса GUI, которые называются - Look and Feel.
Эти темы графического интерфейса содержат как стандартные темы GUI Java - Motif, так и платформенно-ориентированные темы, например Windows, Windows Classic (на Windows) или Gtk+ на Ubuntu.
Далее в примере кода ниже мы создадим приложение, тему которого мы будем менять динамически при нажатии на кнопку:
package com.example.lookandfeel;
// импортируем пакеты графической среды пользователя
import javax.swing.*;
import java.awt.*;
// для вывода отладочных сообщений в консоль
import static java.lang.System.out;
// главный класс приложения
public class Main
{
// точка входа в приложение
public static void main(String[] args)
{
// главное окно приложения
JFrame frame = new JFrame("Переключатель тем");
// при закрытии окна - заканчиваем работу приложения
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// создаем левую панель внутри окна размеров 100 на 100
JPanel menuPanel = new JPanel();
menuPanel.setSize(100, 200);
JLabel label = new JLabel("Заголовок в левом меню");
menuPanel.add(label);
// панель с кнопками переключения тем
JPanel contentPanel = new JPanel();
// кнопки будут располагаться в сетке из 2 столбцов
GridLayout grid = new GridLayout(0,2, 5, 5);
contentPanel.setLayout(grid);
// отрисовываем кнопки со всеми доступным в системе темами оформления
int buttonY = 20;
for(UIManager.LookAndFeelInfo theme : UIManager.getInstalledLookAndFeels()) {
JButton button = new JButton(theme.getName());
button.setBounds(20, buttonY, 100, 30);
// обработчик нажатия на кливишу
// при нажатии на кнопку...
button.addActionListener(action -> {
try {
// ... меняем тему
UIManager.setLookAndFeel(theme.getClassName());
// обновляем интерфейс дерева компонентов
SwingUtilities.updateComponentTreeUI(frame);
}
catch (Exception exception) {
out.println(exception.getMessage());
}
});
contentPanel.add(button);
buttonY += 35;
}
// устанавливаем модель компоновки окна - модель расположения компонентов интерфейса
frame.setLayout(new BorderLayout());
// располагаем меню в левой стороне окна
frame.add(menuPanel, BorderLayout.WEST);
// блок с кнопками в правой строне
frame.add(contentPanel, BorderLayout.EAST);
// устанавливаем размер окна
frame.setSize(500,350);
// располагаем окно по центру экрана
centrifyFrame(frame);
// отображаем окно пользователю
frame.setVisible(true);
}
/**
* Получает размер экрана и устанавливает окно программы по центру
*
* @param frame {{@link JFrame}}
*/
public static void centrifyFrame(JFrame frame)
{
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(dim.width / 2 - frame.getSize().width / 2, dim.height / 2 - frame.getSize().height / 2);
}
}
При нажатии на клавиши в правой стороне окна, визуальный стиль компонентов окна будет меняться. Причем набор кнопок будет отличаться в зависимости от операционной системы и ранее установленный тем.
Таким образом, мы создали графическое приложение на Java, которое показывает базовые встроенные возможности среды.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.