首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >布局内部布局

布局内部布局
EN

Stack Overflow用户
提问于 2013-08-04 13:51:00
回答 1查看 100关注 0票数 1

我有一个带有垂直BoxLayout的BoxLayout,对于一个元素,我希望能够使用另一个BoxLayout,该BoxLayout将元素按时间顺序放置。代码将解释我想要做的事情:

代码语言:javascript
复制
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中吗?我在想,但这似乎有点复杂,一定有更简单的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-04 14:05:05

BoxLayout不是一个容器,它是一个LayoutManager,所以不能将组件添加到BoxLayout中,因为盒子布局没有继承抽象类Component中的任何东西,它会添加到一些容器中,比如JPanel或框架的容器.

所以,这么说是错误的:

代码语言:javascript
复制
 textLayout.add(lblTest_1);

甚至

代码语言:javascript
复制
add(textLayout);

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

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

除了你所做的和避免null布局,你可以做任何事情,因为,设计是你的,只要我更喜欢多个面板,如果需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18043655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档