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

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

  Все выпуски  

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


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

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

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

Канал на яндексДзен:  Фантастика, фэнтази, научпоп, наука, философия, размышления

 

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

Продолжаем изучать менеджеры расположения компонентов, которые начали на прошлом уроке. Итак, BoxLayout. Она позволяет управлять размещением компонентов, отдельно в вертикальном либо горизонтальном направлении помещая их, друг за другом, и управлять пространством между компонентами, используя вставки. Рассмотрим пример:

import java.awt.Component;

import java.awt.Container;

import javax.swing.BoxLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

 

public class BoxLayoutDemo {

    public static void addComponentsToPane(Container pane) {

        pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

        addAButton("Кнопка 1", pane);

        addAButton("Кнопка 2", pane);

        addAButton("Кнопка 3", pane);

        addAButton("Длинная кнопка 4", pane);

        addAButton("Пять", pane);

    }

    

    private static void addAButton(String text, Container container) {

        JButton button = new JButton(text);

        button.setAlignmentX(Component.CENTER_ALIGNMENT);

        container.add(button);

    }

    

    private static void createAndShowGUI() {

   

        // Создание фрейма

        JFrame frame = new JFrame("BoxLayoutDemo");

        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 для чайников. Урок 39. Менеджеры расположения компонентов. Продолжение.

По вертикали или по горизонтали будут располагается кнопки - зависит от установок в конструкторе, если вместо:

pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

написать

pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));

то мы получим уже вот такую картину:

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

 

Можно объединять несколько менеджеров при помощи CardLayoutDemo, например, вот так:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class CardLayoutDemo implements ItemListener {

    JPanel cards;

    final static String BUTTONPANEL = "Кнопочки";

    final static String TEXTPANEL = "Поле ввода";

    

    public void addComponentToPane(Container pane) {

        // поместить JComboBox в JPanel для наглядности.

        JPanel comboBoxPane = new JPanel();

        String comboBoxItems[] = { BUTTONPANEL, TEXTPANEL };

        JComboBox cb = new JComboBox(comboBoxItems);

        cb.setEditable(false);

        cb.addItemListener(this);

        comboBoxPane.add(cb);

 

        // Создание "cards".

        JPanel card1 = new JPanel();

        card1.add(new JButton("Кнопка 1"));

        card1.add(new JButton("Кнопка 2"));

        card1.add(new JButton("Кнопка 3"));

 

        JPanel card2 = new JPanel();

        card2.add(new JTextField("Тут какой-то текст", 20));

        

        // Создаем панель

        cards = new JPanel(new CardLayout());

        cards.add(card1, BUTTONPANEL);

        cards.add(card2, TEXTPANEL);

 

        pane.add(comboBoxPane, BorderLayout.PAGE_START);

        pane.add(cards, BorderLayout.CENTER);

    }

    

    public void itemStateChanged(ItemEvent evt) {

        CardLayout cl = (CardLayout)(cards.getLayout());

        cl.show(cards, (String)evt.getItem());

    }

    

    private static void createAndShowGUI() {

        // Создание и настройка окна

        JFrame frame = new JFrame("CardLayoutDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        CardLayoutDemo demo = new CardLayoutDemo();

        demo.addComponentToPane(frame.getContentPane());

        

        // Показ окна

        frame.pack();

        frame.setVisible(true);

    }

    

    public static void main(String[] args) {

        try {

            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

        } catch (UnsupportedLookAndFeelException ex) {

            ex.printStackTrace();

        } catch (IllegalAccessException ex) {

            ex.printStackTrace();

        } catch (InstantiationException ex) {

            ex.printStackTrace();

        } catch (ClassNotFoundException ex) {

            ex.printStackTrace();

        }

 

        UIManager.put("swing.boldMetal", Boolean.FALSE);

 

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

            public void run() {

                createAndShowGUI();

            }

        });

    }

}

Результатом работы будет вот такая вот программа, в которой можно переключать, что будет показывать, кнопки:

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

или текстовое поле:

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

Продолжение следует.

 

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

 

 


В избранное