2014-10-23 3 views
0

У меня возникают проблемы с созданием вложенных панелей с помощью BoxLayout. У меня есть контейнер с макетом, установленным на BoxLayout (PAGE_AXIS), и в этом контейнере я хочу сгенерировать панели (postedPanel) также с BoxLayout (PAGE_AXIS). И внутри этой панели у меня две панели с PAGE_AXIS и одна с LINE_AXIS.Вложенные BoxLayout с разными осями

Эта панель с LINE_AXIS (postActions panel), кажется, испортила ширину и выравнивание панелей с помощью 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

ответ

2

Прочитайте раздел из свинга учебника по Fixing Alignment Problems.

Я считаю, что вам нужно убедиться, что все ваши компоненты используют одинаковые значения setAlignmentX(...). Я думаю, что по умолчанию панель будет использовать 0.5f, а другие компоненты будут использовать 0.0f.

+0

Я установил выравнивание всех панелей в LEFT_ALIGNMENT, и это сделало трюк. Благодаря! – dyrim

+0

Просьба [принять ответ] (http://meta.stackexchange.com/a/5235/155831), если это помогло решить проблему. –

0

Рассматривали ли вы играть с

BoxLayout.X_AXIS 

или

BoxLayout.Y_AXIS 

, потому что кажется, что потенциал для создания вещи появляются.