代码之家  ›  专栏  ›  技术社区  ›  sproketboy

为什么使用Swing BoxLayout将对象定向

  •  4
  • sproketboy  · 技术社区  · 16 年前

    有人能解释一下为什么文本“选项”在这里缩进吗?这看起来像是BoxLayout中的一个bug。短暂性脑缺血发作

    import javax.swing.*;
    import java.awt.*;
    
    public class BoxLayoutIssue {
    
        public static void main(String[] args) {
    
            JFrame f = new JFrame();
            f.setSize(240, 250);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JPanel panel = new JPanel();
            panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    
            JLabel label = new JLabel("Option");
            panel.add(label);
    
            JLabel a = new JLabel("A");
            JLabel b = new JLabel("B");
            JLabel c = new JLabel("C");
            JLabel d = new JLabel("D");
            JLabel e = new JLabel("E");
    
            Box box = Box.createVerticalBox();
            box.add(a);
            box.add(b);
            box.add(c);
            box.add(d);
            box.add(e);
    
            JScrollPane jscrlpBox = new JScrollPane(box);
            jscrlpBox.setPreferredSize(new Dimension(140, 90));
            panel.add(jscrlpBox);
    
            f.add(panel);
    
            f.setVisible(true);
        }
    }
    
    2 回复  |  直到 16 年前
        1
  •  4
  •   Joe Carnahan    16 年前

    这里的问题是JLabel将其右边缘与面板的中心对齐,而scrollpane将其中心与面板的中心对齐。

    label jscrlpBox Component.LEFT_ALIGNMENT :

    JLabel label = new JLabel("Option");
    label.setAlignmentX(Component.LEFT_ALIGNMENT); // Added
    
    panel.add(label);
    
    JLabel a = new JLabel("A");
    JLabel b = new JLabel("B");
    JLabel c = new JLabel("C");
    JLabel d = new JLabel("D");
    JLabel e = new JLabel("E");
    
    Box box = Box.createVerticalBox();
    box.add(a);
    box.add(b);
    box.add(c);
    box.add(d);
    box.add(e);
    
    JScrollPane jscrlpBox = new JScrollPane(box);
    jscrlpBox.setPreferredSize(new Dimension(140, 90));
    panel.add(jscrlpBox);
    jscrlpBox.setAlignmentX(Component.LEFT_ALIGNMENT); // Added
    

    )那不是我想要的地方。这时我意识到它的右边缘与另一个组件用来对齐其中心的同一条线对齐。

        2
  •  2
  •   camickr    16 年前

    Using a Box Layout . 这里有一些示例试图解释每个组件的“X对齐”如何影响布局。