具有不同轴的嵌套BoxLayout

问题描述 投票:0回答:3

我在使用

BoxLayout
创建嵌套面板时遇到问题。我有一个布局设置为
BoxLayout
(
PAGE_AXIS
) 的容器,在这个容器中我想生成带有
postedPanel
(
BoxLayout
) 的面板 (
PAGE_AXIS
)。在这个面板中,我有两个带有
PAGE_AXIS
的面板和一个带有
LINE_AXIS
的面板。

带有

LINE_AXIS
的面板(
postActions
面板)似乎弄乱了带有
PAGE_AXIS
的面板的宽度和对齐方式。当我将
postActions
的轴设置为
PAGE_AXIS
时,其他面板会拉伸到容器的整个宽度,但当它是
LINE_AXIS
时,其他面板会压缩到容器宽度的一半。有什么想法可以解决这个问题吗?

这是代码:

public void generateFeed(JPanel container) {
    JPanel postedPanel = new JPanel();
    postedPanel.setBackground(Color.WHITE);
    postedPanel.setLayout(new BoxLayout(postedPanel, BoxLayout.PAGE_AXIS));

    // sample post

    JPanel postContent = new JPanel();
    postContent.setLayout(new BoxLayout(postContent, BoxLayout.PAGE_AXIS));
    postContent.setBackground(Color.WHITE);
    JLabel usernameLabel = new JLabel("Name");
    postContent.add(usernameLabel);

    JLabel dateLabel = new JLabel("Date posted");
    postContent.add(dateLabel);

    JLabel status = new JLabel("<html>Content Content Content ContentContent</html>");
    postContent.add(status);

    postedPanel.add(postContent);

    // like, comment panel

    JPanel postActions = new JPanel();
    postActions.setLayout(new BoxLayout(postActions, BoxLayout.LINE_AXIS));
    postActions.setBackground(Color.WHITE);

    JButton likeButton = new JButton("Like");
    postActions.add(likeButton);


    JLabel likesLabel = new JLabel("0 Likes");
    postActions.add(likesLabel);

    JButton commentButton = new JButton("Comment");
    postActions.add(commentButton);


    JLabel commentsLabel = new JLabel("0 Comments");
    postActions.add(commentsLabel);

    postedPanel.add(postActions);

    // sample comment

    JPanel addCommentPanel = new JPanel();
    addCommentPanel.setLayout(new BoxLayout(addCommentPanel, BoxLayout.PAGE_AXIS));
    addCommentPanel.setBackground(new Color(246,247,248));

    JLabel commentUser = new JLabel("Name");
    addCommentPanel.add(commentUser);

    JLabel commentText = new JLabel("<html>Comment Comment Comment Comment Comment Comment </html>");
    addCommentPanel.add(commentText);

    JLabel commentDateLabel = new JLabel("Date");
    addCommentPanel.add(commentDateLabel);

    postedPanel.add(addCommentPanel);


    container.add(postedPanel);

    pack();
}

显示结果的图像: http://pelennor.com/img/sample.png

java swing layout-manager boxlayout
3个回答
3
投票

阅读 Swing 教程中有关解决对齐问题的部分。

我相信您需要确保所有组件都使用相同的

setAlignmentX(...)
值。我认为默认情况下面板将使用 0.5f,其他组件将使用 0.0f。


0
投票

你有没有考虑过玩玩

BoxLayout.X_AXIS 

BoxLayout.Y_AXIS

,因为这似乎有潜力让事情显现出来。


0
投票

线轴对齐X必须等于页面轴对齐Y以使所有组件保持在中心(如果选择0.5)

页码轴反转轴

© www.soinside.com 2019 - 2024. All rights reserved.