组布局中的中心定位(摆动)

时间:2013-11-01 18:33:56

标签: java swing layout user-interface grouplayout

我正在尝试获取“>>”按钮使用GroupLayout垂直居中。

但正如你所看到的那样,它正在接近顶端。我已经尝试搞乱布局,似乎无法让它工作。请帮忙! =)

horizontal_group = layout.createParallelGroup GroupLayout::Alignment::CENTER
horizontal_group.addComponent tags_label
available_across_hor = layout.createSequentialGroup
available_down_hor = layout.createParallelGroup GroupLayout::Alignment::CENTER
available_down_hor.addComponent available_label
available_down_hor.addComponent available_pane
available_down_hor.addComponent new_tag_button
selected_down_hor = layout.createParallelGroup GroupLayout::Alignment::CENTER
selected_down_hor.addComponent selected_label
selected_down_hor.addComponent selected_pane
selected_down_hor.addComponent remove_tag_button
available_across_hor.addGroup available_down_hor
available_across_hor.addComponent move_button
available_across_hor.addGroup selected_down_hor
horizontal_group.addGroup available_across_hor

vertical_group = layout.createSequentialGroup
vertical_group.addComponent tags_label
available_across_ver = layout.createParallelGroup
available_down_ver = layout.createSequentialGroup
available_down_ver.addComponent available_label
available_down_ver.addComponent available_pane
available_down_ver.addComponent new_tag_button
selected_down_ver = layout.createSequentialGroup
selected_down_ver.addComponent selected_label
selected_down_ver.addComponent selected_pane
selected_down_ver.addComponent remove_tag_button
available_across_ver.addGroup available_down_ver
available_across_ver.addComponent move_button
available_across_ver.addGroup selected_down_ver
vertical_group.addGroup available_across_ver

layout.setHorizontalGroup horizontal_group
layout.setVerticalGroup vertical_group

UI

1 个答案:

答案 0 :(得分:0)

以下是解决方案:

package com.zetcode;

import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.CENTER;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;


public class GroupLayoutTags extends JFrame {

    public GroupLayoutTags() {

        initUI();

        setTitle("Tags");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          
    }

    private void initUI() {

        Container pane = getContentPane();
        GroupLayout gl = new GroupLayout(pane);
        pane.setLayout(gl); 

        JLabel avLbl = new JLabel("Available");
        JLabel tagsLbl = new JLabel("Tags");
        JLabel selLbl = new JLabel("Selected");

        JButton newBtn = new JButton("New");
        JButton moveBtn = new JButton(">>");
        JButton remBtn = new JButton("Remove");

        JList leftList = new JList();
        JScrollPane spleft = new JScrollPane(leftList);
        JList rightList = new JList();
        JScrollPane spright = new JScrollPane(rightList);

        gl.setAutoCreateGaps(true);
        gl.setAutoCreateContainerGaps(true);

        gl.setHorizontalGroup(gl.createParallelGroup(CENTER)
                .addComponent(tagsLbl)
                .addGroup(gl.createSequentialGroup()
                        .addGroup(gl.createParallelGroup(CENTER)
                                .addComponent(avLbl)
                                .addComponent(spleft, 100, 200, Short.MAX_VALUE)
                                .addComponent(newBtn))
                        .addComponent(moveBtn)
                        .addGroup(gl.createParallelGroup(CENTER)
                                .addComponent(selLbl)
                                .addComponent(spright, 100, 200, Short.MAX_VALUE)
                                .addComponent(remBtn)))
        );

        gl.setVerticalGroup(gl.createSequentialGroup()
                .addComponent(tagsLbl)
                .addGroup(gl.createParallelGroup(CENTER)
                        .addGroup(gl.createSequentialGroup()
                                .addComponent(avLbl)
                                .addComponent(spleft, 100, 250, Short.MAX_VALUE)
                                .addComponent(newBtn))
                        .addComponent(moveBtn)
                        .addGroup(gl.createSequentialGroup()
                                .addComponent(selLbl)
                                .addComponent(spright, 100, 250, Short.MAX_VALUE)
                                .addComponent(remBtn)))
        );

        pack();        

    }


    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                GroupLayoutTags ex = new GroupLayoutTags();
                ex.setVisible(true);
            }
        });
    }
}

如果找到MigLayout经理比GroupLayout更容易使用。 但是通过一些练习,GroupLayout也是可行的。

GroupLayout tags