Робимо з jpanel груп бокс group box, java swing і інша джава

Цікавою особливістю компонентів 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. От і все.

За традицією простий приклад. Зовнішній вигляд тестового додатка показаний на малюнку нижче.

Робимо з jpanel груп бокс group box, java swing і інша джава

Вихідний код представлений нижче.

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);

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

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

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

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

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 ();
>
>);
>
>