将JComponents与不同的父项

时间:2015-08-23 11:08:29

标签: java swing alignment layout-manager jcomponent

我使用Swing构建了一个非常复杂的GUI,并且遇到了我需要帮助的对齐问题。下面的代码是我所拥有的情况的简化版本,以便使问题更加清晰。

基本上我想知道有可能将JComponent与具有不同父组件的JComponent对齐吗?我知道我可以插入隐形Box组件来解决这个问题,但我认为这不是一个好的解决方案,原因有几个。

在下面的代码中,我希望Child具有相同的大小并与Niece垂直对齐(基本上Child与Niece处于相同的位置,只是在它下面的一行中)。姐姐的下面应该是空的空间。

是否有某种方法可以使Niece的左对齐相对于主内容窗格,并将Child的左对齐设置为相同?

代码:

import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import java.awt.Container;
import javax.swing.JComponent;
import javax.swing.GroupLayout;
import javax.swing.JTextField;
import java.awt.Dimension;

public class Test extends JFrame {
    public static void main(String args[]) {
        new Test();
    }

    public Test() {

        JTabbedPane tabPane = new JTabbedPane();
        JTextField edPane1 = new JTextField("Sister");
        JTextField edPane2 = new JTextField("Child");
        JTextField tabEdPane = new JTextField("Niece");
        edPane1.setPreferredSize(new Dimension(300, 100));
        edPane2.setPreferredSize(new Dimension(300, 100));
        tabEdPane.setPreferredSize(new Dimension(300, 100));
        tabPane.addTab("Tab", tabEdPane);

        Container contPane = getContentPane();

        GroupLayout layout = new GroupLayout(contPane);
        setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(
            layout.createParallelGroup()
                .addGroup(layout.createSequentialGroup()
                    .addComponent(edPane1)
                    .addComponent(tabPane))
                .addComponent(edPane2)
        );
        layout.setVerticalGroup(
            layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup()
                    .addComponent(edPane1)
                    .addComponent(tabPane))
                .addComponent(edPane2)
        );

        setTitle("Title");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

任何解决方案的建议都可能有所帮助!

编辑:这应该是它的样子:

Intended look

0 个答案:

没有答案