Отправляет email-рассылки с помощью сервиса Sendsay

Изучаем язык Java

  Все выпуски  

Изучаем язык Java


Новое на сайте Программирование - это просто! (www.easyprog.ru):

В платном разделе

В бесплатном разделе

Java для чайников. Урок 38. Менеджеры расположения компонентов

На прошлом уроке мы с вами познакомились с классом JFrame. Пока мы еще не обладаем достаточными знаниями, чтобы написать программу калькулятор, которую начали на уроке 35. Поэтому изучим еще одну важную возможность Java, как менеджеры расположения компонентов. Сначала рассмотрим BorderLayout. Он позволяет расположить компоненты в центре, снизу сверху и по бокам (слева и справа, примерно вот так):

Java для чайников. Урок 38. Менеджеры расположения компонентов

Вот как выглядит код:

import java.awt.BorderLayout;

import javax.swing.*;

 

 

public class BorderLayoutDemo {

    public static void main(String[] args) {

        // создаем фрейм и устанавливаем его размер.

        JFrame  jf = new JFrame();

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jf.setSize(400, 300);

        jf.setVisible(true);

       

        // создаем панель.

        JPanel  p = new JPanel();

        jf.add(p);

       

        // к панели добавляем менеджер BorderLayout.

        p.setLayout(new BorderLayout());

       

        // к панели добавляем кнопку и устанавливаем для нее менеджер в верхнее расположение.

        p.add(new JButton("Свере (верх)"), BorderLayout.NORTH);

       

        // к панели добавляем кнопку и устанавливаем для нее менеджер в нижнее расположение.

        p.add(new JButton("Юг (низ)"), BorderLayout.SOUTH);

       

        // к панели добавляем метку и устанавливаем для нее правое расположение.

        p.add(new JLabel("Восток (справа)"), BorderLayout.EAST);       

       

        // к панели добавляем флажок и устанавливаем для него левое расположение.

        p.add(new JCheckBox("Запад (слева)"), BorderLayout.WEST);          

       

        // к панели добавляем кнопку и устанавливаем для нее центральное расположение.     

        p.add(new JButton("Кнопка в центре"), BorderLayout.CENTER);

    }

}

Что характерно, если мы добавим к какой-нибудь панели, например, к левой, новый элемент:

        // к панели добавляем флажок и устанавливаем для него левое расположение.

        p.add(new JCheckBox("Запад (слева)"), BorderLayout.WEST);          

        // к панели добавляем флажок и устанавливаем для него левое расположение.

        p.add(new JCheckBox("Еще одна метка"), BorderLayout.WEST); 

То она перекроек старый:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Точно также, если мы попробуем поместить еще один элемент в центре.

Другой контейнер - это FlowLayout. Он обеспечивает последовательное размещение компонентов с выравниванием по центру.  Рассмотрим пример:

// Пример последовательного расположения компонентов - FlowLayout

 

import java.awt.*;

import javax.swing.*;

 

public class FlowLayoutTest extends JFrame

{

    public FlowLayoutTest()

    {

        super("FlowLayout");

        setDefaultCloseOperation( EXIT_ON_CLOSE );

        setSize(700, 120);

       

        // Панель содержимого

        Container container = getContentPane();

       

        // Определение последовательного расположения

        // с выравниванием компонентов по центру

        container.setLayout (new FlowLayout(FlowLayout.CENTER));

       

        // добавляем компоненты

        container.add( new JButton("Школа"   ));

        container.add( new JButton("Институт"));

        container.add( new JButton("Аспирантура"));

       

        // Открываем окно

        setVisible(true);

    }

   

    public static void main(String[] args) {

        new FlowLayoutTest();

    }

}

И вот как будет выглядеть результат работы данной программы:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Теперь попробуем сетку. (GridLayout):

import java.awt.GridLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

 

public class GridLayoutDemo {

    public static void main(String[] args) {

        JFrame jf = new JFrame();

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jf.setSize(400, 300);

        jf.setVisible(true);

 

        // создаем  панель.

        JPanel  p = new JPanel();

        jf.add(p);

 

        // к панели добавляем менеджер GridLayout и устанавливаем размеры таблицы 3*3. 

        p.setLayout(new GridLayout(3,3));

 

        // к панели добавляем кнопку и устанавливаем для нее менеджер в верхнее расположение. 

        p.add(new JButton("start 1"));

        p.add(new JButton("start 2"));

        p.add(new JButton("start 3"));

        p.add(new JButton("start 4"));

        p.add(new JButton("start 6"));

        p.add(new JButton("Okay"));

       

        // Открываем окно

        jf.setVisible(true);       

    }

}

И программа будет выглядеть вот так:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Если сделать больше элементов:

        // к панели добавляем кнопку и устанавливаем для нее менеджер в верхнее расположение. 

        p.add(new JButton("start 1"));

        p.add(new JButton("start 2"));

        p.add(new JButton("start 3"));

        p.add(new JButton("start 4"));

        p.add(new JButton("start 6"));

        p.add(new JButton("start 7"));

        p.add(new JButton("Okay"));

То они продолжат ложиться на ячейки таблицы:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Теперь рассмотрим еще один интересный лайоут - GridBagLayout. В отличии от GridLayout он позволяет определить разную высоту и ширину для колонок и строк таблицы. По существу, GridBagLayout помещает компоненты в ячейки, и затем использует привилегированные размеры компонентов, чтобы определить, насколько большой ячейка должна быть. Рассмотрим пример:

import java.awt.*;

import javax.swing.JButton;

import javax.swing.JFrame;

 

public class GridBagLayoutDemo {

    final static boolean shouldFill = true;

    final static boolean shouldWeightX = true;

    final static boolean RIGHT_TO_LEFT = false;

 

    public static void addComponentsToPane(Container pane) {

        if (RIGHT_TO_LEFT) {

            pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

        }

 

        JButton button;

        pane.setLayout(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();

        

        if (shouldFill) {

            // натуральная высота, максимальная ширина

            c.fill = GridBagConstraints.HORIZONTAL;

        }

 

        button = new JButton("Кнопка 1");

 

        if (shouldWeightX) {

            c.weightx = 0.5;

        }

 

        c.fill = GridBagConstraints.HORIZONTAL;

        c.gridx = 0;

        c.gridy = 0;

        pane.add(button, c);

 

        button = new JButton("Кнопка 2");

        c.fill = GridBagConstraints.HORIZONTAL;

        c.weightx = 0.5;

        c.gridx = 1;

        c.gridy = 0;

        pane.add(button, c);

        

        button = new JButton("Кнопка 3");

        c.fill = GridBagConstraints.HORIZONTAL;

        c.weightx = 0.5;

        c.gridx = 2;

        c.gridy = 0;

        pane.add(button, c);

 

        button = new JButton("Очень большая кнопка");

        c.fill = GridBagConstraints.HORIZONTAL;

        c.ipady = 40;      // сделать эту кнопку высокой

        c.weightx = 0.0;

        c.gridwidth = 3;

        c.gridx = 0;

        c.gridy = 1;

        pane.add(button, c);

 

        button = new JButton("Пятая кнопка");

        c.fill = GridBagConstraints.HORIZONTAL;

        c.ipady = 0;       // установить первоночальный размер кнопки

        c.weighty = 1.0;   // установить отступ

        c.anchor = GridBagConstraints.PAGE_END; // установить кнопку в конец окна

        c.insets = new Insets(10, 0, 0, 0);  // поставить заглушку

        c.gridx = 1;       // выравнять компонент по Button 2

        c.gridwidth = 2;   // установить в 2 колонку

        c.gridy = 2;       // и 3 столбец

        pane.add(button, c);

 

    }

 

    private static void createAndShowGUI() {

        // Создание окна

        JFrame frame = new JFrame("GridBagLayoutDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        

        // Установить панель содержания

        addComponentsToPane(frame.getContentPane());

 

        // Показать окно

        frame.pack();

        frame.setVisible(true);

    }

 

    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}

Запустив эту программу, мы увидим:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Рассмотрим, как мы управляем размером и положением элементов. Допустим, большая кнопка:

        button = new JButton("Очень большая кнопка");

        c.fill = GridBagConstraints.HORIZONTAL;

        c.ipady = 40;      // сделать эту кнопку высокой

        c.weightx = 0.0;

        c.gridwidth = 3;

        c.gridx = 0;

        c.gridy = 1;

        pane.add(button, c);

Сделаем значение ipady равным 10:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Можем заменить координаты, например, gridx поставить 1:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Можно менять и ширину объекта. Вернем координату на место и поставим gridwidth не 3, а 2:

Java для чайников. Урок 38. Менеджеры расположения компонентов

Как видим, для написания калькулятора, который мы начали писать на уроке Java для чайников. Урок 36. Пишем калькулятор. Начало. В будущих уроках мы обязательно продолжим писать и калькулятор, и изучать другие лайоуты. А на сегодня все, дно новых встреч.

(С) Шуравин Александр

 

 


В избранное