1

我有一个带有垂直 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里面?我在想,但似乎有点太复杂了,一定有更简单的方法吗?

4

1 回答 1

3

BoxLayoutBoxLayout它不是一个容器,它是一个 LayoutManager,因此,由于框布局没有从抽象类继承任何东西,因此无法添加组件Component,它将添加到一些容器,例如JPanel框架的容器......

所以,这样说是不对的:

 textLayout.add(lblTest_1);

甚至

add(textLayout);

因为这个方法将一个组件添加到框架的容器中,而BoxLayout不是一个组件。


我应该创建另一个 JPanel 并将其放在第一个 JPanel 中吗?

除了您所做的和避免null布局之外,您可以自由地做任何事情,因为设计取决于您,只要我愿意的话,我更喜欢多个面板。

于 2013-08-04T14:05:05.260 回答