Темы графического интерфейса в Java

Темы графического интерфейса в 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, которое показывает базовые встроенные возможности среды.

Источник

Просмотров:

Добавить комментарий