Layouts и абсолютное позиционирование в Java Swing

Создание приложения на Java Swing включает в себя создание графического интерфейса пользователя. Для этого в распоряжение разработчика библиотека Java Swing предоставила достаточно большой набор компонентов. Чтобы расположить компоненты так, как хочет разработчик необходимо воспользоваться менеджерами компоновки (layout managers) или абсолютным позиционированием.

Абсолютное позиционирование – задание точного положения и размера компонентов. При использовании определенного layout manager разработчик «точно» не указывает расположение компонентов и их размер. Сейчас посмотрим, как работать с абсолютным позиционированием.

Рассмотрим пример. У нас есть контейнер JPanel, на котором мы хотим разместить некоторые компоненты. Размер и расположение каждого компонента хотим задать точно по пикселям. Что для этого необходимо сделать?

Сначала нужно сказать контейнеру о том, что мы не будем использовать layout manager. Для этого вызываем метод setLayout у контейнера и передаем туда в качестве параметра null.

JPanel panel = new JPanel();
panel.setLayout(null);

Далее необходимо создать компонент, который мы хотим разместить на контейнере и при помощи метода setBounds задать у компонента его координаты и размеры. Метод имеет четыре параметра. Первые два параметра соответственно X и Y координаты самой левой верхней точки компонента, вторая пара чисел – размеры: ширина и высота.

JButton button = new JButton(“Button”);
Button.setBounds(5, 5, 100, 30);

Посмотрим тестовое приложение.

absolute_positioning

Создаем панель. Устанавливаем ей layout в null. Затем создаем кнопки, говорим им, где они будут располагаться и какой размер будут иметь через setBounds и добавляем на панель.

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

     public TestFrame() {
          super("Test frame");
          createGUI();
     }

     public void createGUI() {
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          JPanel panel = new JPanel();
          panel.setLayout(null);

          JButton button1 = new JButton("Button 1");
          button1.setBounds(5, 5, 85, 30);
          panel.add(button1);

          JButton button2 = new JButton("Button 2");
          button2.setBounds(95, 40, 85, 30);
          panel.add(button2);

          JButton button3 = new JButton("Button 3");
          button3.setBounds(185, 75, 85, 30);
          panel.add(button3);

          getContentPane().add(panel);

          setPreferredSize(new Dimension(285, 145));
     }

     public static void main(String[] args) {
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                    JFrame.setDefaultLookAndFeelDecorated(true);
                    TestFrame frame = new TestFrame();
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
               }
          });
     }
}

Реклама

One Response to Layouts и абсолютное позиционирование в Java Swing

  1. Анатолий says:

    Собственно, а где лайоуты? Вижу только абсолютное =( Аффтар, огорчаешь…

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

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