Делаем из JPanel групп бокс Group Box

Интересной особенностью компонентов Java Swing является то, что у них можно устанавливать border — бордер, бордюр или граница, кому как больше нравится. Есть несколько видов border’ов, но рассматривать все я не хотел, а только обратить внимание на один интересный на мой взгляд border. Данный border позволяет сделать из контейнера, например JPanel, своеобразный Group Box. Этот Group Box может содержать внутри себя различные компоненты в том числе и другие контейнеры, а еще имеет визуальную границу, которая очерчивается по периметру компонента. Причем в левом верхнем углу можно установить надпись, которая будет нести некую смысловую нагрузку, говорить пользователю о расположенных внутри элементах управления и визуально отделять контейнер от других, если таковых имеется приличное количество в окне приложения.

Создание такого border’а происходит при помощи фабрики BorderFactory. У фабрики есть много различных методов, которые позволяют создавать различные типы border’ов. Однако, для нас важен метод, который создает border, который делает из JPanel своеобразный GroupBox. Таким методом является createTitledBorder. Методу в качестве параметра передается строка, которая будет заголовком Group Box’а. Возвращает метод объект Border, который затем мы устанавливаем у панели при помощи метода setBorder. Выглядит всё это примерно так, как показано ниже.

JPanel panel = new JPanel();
Border border = BorderFactory.createTitledBorder("Group Box title");
panel.setBorder(border);

Первой строчкой кода создаем панель. Далее создаем объект Border, а затем устанавливаем у панели только что созданный border. Вот и всё.

По традиции простой пример. Внешний вид тестового приложения показан на рисунке ниже.

group_box

Исходный код представлен ниже.

package al.catalog;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;

public class TestFrame {

     public static void createGUI() {
          JFrame frame = new JFrame("Test frame");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          JPanel mainPanel = new JPanel();
          mainPanel.setLayout(new BorderLayout());

          JPanel northPanel = new JPanel();
          Border northBorder = BorderFactory.createTitledBorder("NORTH panel");
          northPanel.setBorder(northBorder);

          northPanel.add(createEmptyLabel());

          mainPanel.add(northPanel, BorderLayout.NORTH);

          JPanel southPanel = new JPanel();
          Border southBorder = BorderFactory.createTitledBorder("SOUTH panel");
          southPanel.setBorder(southBorder);

          southPanel.add(createEmptyLabel());

          mainPanel.add(southPanel, BorderLayout.SOUTH);

          JPanel westPanel = new JPanel();
          Border westBorder = BorderFactory.createTitledBorder("WEST panel");
          westPanel.setBorder(westBorder);

          westPanel.add(createEmptyLabel());

          mainPanel.add(westPanel, BorderLayout.WEST);

          JPanel eastPanel = new JPanel();
          Border eastBorder = BorderFactory.createTitledBorder("EAST panel");
          eastPanel.setBorder(eastBorder);

          eastPanel.add(createEmptyLabel());

          mainPanel.add(eastPanel, BorderLayout.EAST);

          JPanel centerPanel = new JPanel();
          Border centerBorder = BorderFactory.createTitledBorder("CENTER panel");
          centerPanel.setBorder(centerBorder);

          mainPanel.add(centerPanel, BorderLayout.CENTER);

          frame.getContentPane().add(mainPanel);

          frame.setPreferredSize(new Dimension(550, 400));
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
     }

     public static JLabel createEmptyLabel() {
          JLabel label = new JLabel();
          label.setPreferredSize(new Dimension(100, 30));
          return label;
     }

     public static void main(String[] args) {
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                    JFrame.setDefaultLookAndFeelDecorated(true);
                    createGUI();
               }
          });
     }
}

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: