首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java BoxLayout对齐问题

Java BoxLayout对齐问题
EN

Stack Overflow用户
提问于 2013-11-10 15:47:29
回答 2查看 221关注 0票数 1

有人能帮我吗。为什么标签“当前”在面板/帧中没有左对齐?

代码语言:javascript
复制
   public static void main(String[] args) {



            JFrame TFrame = new JFrame("Test DisplayLayout");
            TFrame.setResizable(true);
            TFrame.setSize(new Dimension(900, 840));
            TFrame.setLocationRelativeTo(null);
            TFrame.setTitle("DisplayLayout");   
            TFrame.setVisible(true); 


            JPanel P  = DisplayLayout2();

            P.setVisible(true);
            P.setOpaque(true);
            P.setLayout(new BoxLayout(P, BoxLayout.Y_AXIS));

            TFrame.add(P);

            TFrame.revalidate();
            TFrame.repaint();


        }

       public static JPanel DisplayLayout2() {

            JPanel Panel=new JPanel();
            Panel.setVisible(true);
            Panel.setOpaque(true);
            Panel.setLayout(new BoxLayout(Panel, BoxLayout.Y_AXIS));
            Panel.setAlignmentX(Component.LEFT_ALIGNMENT);

            JLabel lab = new JLabel("Current");
            lab.setHorizontalAlignment(SwingConstants.LEFT);
            lab.setForeground(Color.WHITE);
            lab.setBackground(Color.PINK);
            lab.setOpaque(true);    
            Panel.add(lab,Component.LEFT_ALIGNMENT);

            JPanel posPanel = new JPanel();
            JScrollPane scrollPane = new JScrollPane(posPanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            scrollPane.setPreferredSize(new Dimension(290, 200));
            scrollPane.setOpaque(true);        
            posPanel.setBackground(Color.YELLOW);
            posPanel.setPreferredSize(new Dimension(290, 200));
            posPanel.setLayout(new BoxLayout(posPanel, BoxLayout.Y_AXIS));          
            posPanel.setAlignmentX(Component.LEFT_ALIGNMENT);   

            Panel.add(scrollPane);

            return Panel;

        }

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-10 16:04:37

这是BoxLayout的怪癖之一(对我来说,这是一个有记录的预期布局行为),我忘记了为什么会这样做,但我知道至少有一种方法:将JLabel放入使用FlowLayout.LEFT (或head )的JPanel中,并将其添加到BoxLayout中--使用容器:

代码语言:javascript
复制
JPanel labPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
labPanel.add(lab);
panel.add(labPanel, Component.LEFT_ALIGNMENT);

请注意,我认为这与JLabel不想展开有关,而包含它的JPanel是这样做的,但不要引用我的话。

编辑

来自BoxLayout教程

对于自上而下的盒子布局,容器的首选宽度是子容器的最大首选宽度。如果容器被迫变宽,BoxLayout会尝试将每个组件的宽度与容器的宽度(减去内嵌)进行调整。如果组件的最大大小小于容器的宽度,则使用X对齐。

您可能可以通过将JLabel的和JScrollPane的x-对齐设置为Component.LEFT_ALIGNMENT来解决这个问题。您当前的代码忘记设置JScrollPane的x对齐,这就是您的问题所在:

代码语言:javascript
复制
scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT);

例如:

代码语言:javascript
复制
import java.awt.*;
import javax.swing.*;

public class Foo2 {

   private static void createAndShowGui() {
      JLabel topLabel = new JLabel("Top Label", SwingConstants.LEFT);
      topLabel.setOpaque(true);
      topLabel.setBackground(Color.pink);

      JScrollPane scrollpane = new JScrollPane(
            Box.createRigidArea(new Dimension(400, 400)),
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

      JPanel mainPanel = new JPanel();
      mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));

      topLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
      mainPanel.add(topLabel);
      scrollpane.setAlignmentX(Component.LEFT_ALIGNMENT);
      mainPanel.add(scrollpane);

      JFrame frame = new JFrame("Foo");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

这导致:

票数 0
EN

Stack Overflow用户

发布于 2013-11-10 16:27:35

在组件中使用常量(左、右、中)

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

https://stackoverflow.com/questions/19891678

复制
相关文章

相似问题

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