Java 内部布局

Java 内部布局,java,swing,layout,jpanel,awt,Java,Swing,Layout,Jpanel,Awt,我有一个带有垂直BoxLayout的JPanel,对于一个元素,我希望能够使用另一个水平放置元素的BoxLayout。 代码将解释我试图做什么: private void prepareGUI() { setBorder(new EmptyBorder(20, 0, 20, 0)); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); JLabel lblTitle = new JLabel("Downloading");

我有一个带有垂直BoxLayout的JPanel,对于一个元素,我希望能够使用另一个水平放置元素的BoxLayout。 代码将解释我试图做什么:

private void prepareGUI() {
    setBorder(new EmptyBorder(20, 0, 20, 0));
    setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

    JLabel lblTitle = new JLabel("Downloading");
    lblTitle.setFont(new Font("Arial", Font.PLAIN, 20));
    lblTitle.setAlignmentX(Component.CENTER_ALIGNMENT);

    add(lblTitle);

    Component verticalStrut = Box.createVerticalStrut(20);
    add(verticalStrut);

    JProgressBar progressBar = new JProgressBar();
    progressBar.setStringPainted(true);
    progressBar.setBorder(null);
    progressBar.setValue(50);

    Dimension size = new Dimension(300, 25);
    progressBar.setMinimumSize(size);
    progressBar.setMaximumSize(size);
    progressBar.setPreferredSize(size);
    add(progressBar);

    BoxLayout textLayout = new BoxLayout(this, BoxLayout.Y_AXIS);

    JLabel lblTest_1 = new JLabel("Test 1!");
    textLayout.add(lblTest_1);

    JLabel lblTest_2 = new JLabel("Test 2!");
    textLayout.add(lblTest_2);

    add(textLayout);
}
显然这是不可能的,因为BoxLayout不是一个容器(它甚至要求在构建时链接到容器)。
我的问题是什么是实现我想要的最好的方法?我应该创建另一个JPanel并将其放在第一个JPanel中吗?我在想,但它似乎有点太复杂了,必须有一个更简单的方法?

BoxLayout
不是容器,而是布局管理器,因此,组件不能添加到
BoxLayout
box layout没有继承抽象类
组件的任何内容,它将添加到一些容器中,如
JPanel
或框架的容器

所以,说:

 textLayout.add(lblTest_1);
甚至

add(textLayout);
因为此方法将组件添加到框架的容器中,并且
BoxLayout
不是组件


我是否应该创建另一个JPanel并将其放入第一个JPanel中


除了你所做的和避免出现空白的布局外,你可以自由地做任何事情,因为设计取决于你,因为如果需要的话,我更喜欢多个面板。

最好的方法是拿一支铅笔和一张纸画画。作为旁白: