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

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

  Все выпуски  

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


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

Продолжим изучение лайоута GroupLayout. Предположим, у нас есть девять кнопок. Расположим их сначала просто горизонтально в ряд:

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

import javax.swing.*;

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

 

public class Demo extends JFrame {

    public Demo() {

        

        GroupLayout layout = new GroupLayout(getContentPane());

        getContentPane().setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);

       

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

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

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

        JButton btn4 = new JButton("Кнопка 4");

        JButton btn5 = new JButton("Кнопка 5");

        JButton btn6 = new JButton("Кнопка 6");

        JButton btn7 = new JButton("Кнопка 7");

        JButton btn8 = new JButton("Кнопка 8");

        JButton btn9 = new JButton("Кнопка 9");

 

        layout.setHorizontalGroup(layout.createSequentialGroup()

            .addComponent(btn1)

            .addComponent(btn2)

            .addComponent(btn3)

            .addComponent(btn4)

            .addComponent(btn5)

            .addComponent(btn6)

            .addComponent(btn7)

            .addComponent(btn8)

            .addComponent(btn9)

        );

        

        

        layout.setVerticalGroup(layout.createSequentialGroup()     

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn1)

                .addComponent(btn2)

                .addComponent(btn3)

                .addComponent(btn4)

                .addComponent(btn5)

                .addComponent(btn6)

                .addComponent(btn7)

                .addComponent(btn8)

                .addComponent(btn9)

                )

        );

        

        setTitle("Демо программа");

        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 Demo().setVisible(true);

            }

        });

    }

}

Что мы сделали в данном примере? Просто затолкали их как есть в горизонтальную группу, а в вертикальную добавили их сгруппированными. 

Можно сделать наоборот, сгруппировать горизонтально, но как есть вставить вертикально:

        layout.setHorizontalGroup(layout.createSequentialGroup()

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn1)

                .addComponent(btn2)

                .addComponent(btn3)

                .addComponent(btn4)

                .addComponent(btn5)

                .addComponent(btn6)

                .addComponent(btn7)

                .addComponent(btn8)

                .addComponent(btn9)

            )

        );

        

        

        layout.setVerticalGroup(layout.createSequentialGroup()     

            .addComponent(btn1)

            .addComponent(btn2)

            .addComponent(btn3)

            .addComponent(btn4)

            .addComponent(btn5)

            .addComponent(btn6)

            .addComponent(btn7)

            .addComponent(btn8)

            .addComponent(btn9)

        );

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

А теперь сделаем вот такую программу:

Для этого нужно по вертикали и по горизонтали сгруппировать кнопочки по три:

        layout.setHorizontalGroup(layout.createSequentialGroup()

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn1)

                .addComponent(btn2)

                .addComponent(btn3)

            )

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn4)

                .addComponent(btn5)

                .addComponent(btn6)

            )

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn7)

                .addComponent(btn8)

                .addComponent(btn9)

            )

        );

        

        layout.setVerticalGroup(layout.createSequentialGroup()     

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn1)

                .addComponent(btn4)

                .addComponent(btn7)

            )

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn2)

                .addComponent(btn5)

                .addComponent(btn8)

            )

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn3)

                .addComponent(btn6)

                .addComponent(btn9)

            )

        );

Обратите внимание, что в горизонтальной группе мы кнопки группируем (1,2,3), (4,5,6), (7,8,9) - и это у нас столбцы. А в вертикальной группировке мы добавляем строчки, и они у нас уже будут (1,4,7), (2,5,8), (3,6,9).

Если мы хотим наоборот, то нужно сделать во так:

layout.setHorizontalGroup(layout.createSequentialGroup()

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn1)

                .addComponent(btn4)

                .addComponent(btn7)

            )

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn2)

                .addComponent(btn5)

                .addComponent(btn8)

            )

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn3)

                .addComponent(btn6)

                .addComponent(btn9)

            )

        );

        

        layout.setVerticalGroup(layout.createSequentialGroup()     

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn1)

                .addComponent(btn2)

                .addComponent(btn3)

            )

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn4)

                .addComponent(btn5)

                .addComponent(btn6)

            )

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn7)

                .addComponent(btn8)

                .addComponent(btn9)

            )

        ); 

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

А теперь попробуем убрать кнопку 4 из серединной строки и поместить в первую, вот так:

Как мы это сделаем? Во-первых, уберем из описания столбца (1,4,7) и поместим в новый, четвертый столбец:

        layout.setHorizontalGroup(layout.createSequentialGroup()

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn1)            

                        .addComponent(btn7)

            )

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn2)

                .addComponent(btn5)

                .addComponent(btn8)

            )

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn3)

                .addComponent(btn6)

                .addComponent(btn9)

            )

            .addGroup(layout.createParallelGroup(LEADING)

                .addComponent(btn4)

            )

        );

А во-вторых, уберем кнопку "4" из второй строки и поместим в первую:

        layout.setVerticalGroup(layout.createSequentialGroup()     

                  .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn1)

                .addComponent(btn2)

                .addComponent(btn3)

                .addComponent(btn4)

            )

            .addGroup(layout.createParallelGroup(BASELINE)             

                        .addComponent(btn5)

                .addComponent(btn6)

            )

            .addGroup(layout.createParallelGroup(BASELINE)

                .addComponent(btn7)

                .addComponent(btn8)

                .addComponent(btn9)

            )

        );  

Что еще можно сделать с данным лайоутом? Об этом вы узнаете в следуем уроке. 

 

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

 

 


В избранное