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

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

  Все выпуски  

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


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

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

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

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

 

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

Есть еще такой хитрый менеджер расположений как GroupLayout, он позволяет независимо устанавливать вертикальное и горизонтальное расположение компонентов. В данном менеджере используются два типа добавление компонентов: параллельный и последовательный.

Давайте посмотрим пример:

import javax.swing.*;

import static javax.swing.GroupLayout.Alignment.*;

 

public class Find extends JFrame {

    public Find() {

        JLabel label = new JLabel("Find What:");

        JTextField textField = new JTextField();

        JCheckBox caseCheckBox = new JCheckBox("Match Case");

        JCheckBox wrapCheckBox = new JCheckBox("Wrap Around");

        JCheckBox wholeCheckBox = new JCheckBox("Whole Words");

        JCheckBox backCheckBox = new JCheckBox("Search Backwards");

        JButton findButton = new JButton("Find");

        JButton cancelButton = new JButton("Cancel");

        

        caseCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

        wrapCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

        wholeCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

        backCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

        

        GroupLayout layout = new GroupLayout(getContentPane());

        getContentPane().setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);

 

        layout.setHorizontalGroup(layout.createSequentialGroup()

                .addComponent(label)

                .addGroup(layout.createParallelGroup(LEADING)

                        .addComponent(textField)

                        .addGroup(layout.createSequentialGroup()

                        .addGroup(layout.createParallelGroup(LEADING)

                                .addComponent(caseCheckBox)

                                .addComponent(wholeCheckBox))

                        .addGroup(layout.createParallelGroup(LEADING)

                        .addComponent(wrapCheckBox)

                        .addComponent(backCheckBox))))

                .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(findButton)

                .addComponent(cancelButton))

        );

        

        layout.linkSize(SwingConstants.HORIZONTAL, findButton, cancelButton);

        

        layout.setVerticalGroup(layout.createSequentialGroup()

                .addGroup(layout.createParallelGroup(BASELINE)

                        .addComponent(label)

                        .addComponent(textField)

                        .addComponent(findButton))

                .addGroup(layout.createParallelGroup(LEADING)

                .addGroup(layout.createSequentialGroup()

                        .addGroup(layout.createParallelGroup(BASELINE)

                                .addComponent(caseCheckBox)

                                .addComponent(wrapCheckBox))

                        .addGroup(layout.createParallelGroup(BASELINE)

                        .addComponent(wholeCheckBox)

                        .addComponent(backCheckBox)))

                .addComponent(cancelButton))

        );

        

        setTitle("Find");

        pack();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

   

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    UIManager.setLookAndFeel(

                            "javax.swing.plaf.metal.MetalLookAndFeel");

                } catch (Exception ex) {

                    ex.printStackTrace();

                }

                new Find().setVisible(true);

            }

        });

    }

}

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

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

Немного поясню текст программы. Сначала мы делаем горизонтальное размещение:

        layout.setHorizontalGroup(layout.createSequentialGroup()

                .addComponent(label)

                .addGroup(layout.createParallelGroup(LEADING)

                        .addComponent(textField)

                        .addGroup(layout.createSequentialGroup()

                        .addGroup(layout.createParallelGroup(LEADING)

                                .addComponent(caseCheckBox)

                                .addComponent(wholeCheckBox))

                        .addGroup(layout.createParallelGroup(LEADING)

                        .addComponent(wrapCheckBox)

                        .addComponent(backCheckBox))))

                .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(findButton)

                .addComponent(cancelButton))

        );

Мы размещаем последовательно метку "Find What", затем группу с полем ввода и флажками, и только потом кнопки:

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

А вот внутри группы мы текстовое поле и группу флажков размещаем параллельно. Сама группа флажков состоит из двух групп флажков, и эти две группы размещены последовательно:

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

но внутри группы флажки размещены параллельно:

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

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

 

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

 

 


В избранное