有人可以解释为什么文字“选项”在这里缩进了吗?这看起来像BoxLayout中的一个错误。 TIA
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);
}
}
答案 0 :(得分:4)
这里的问题是JLabel的右边缘与面板的中心对齐,而滚动窗格的中心与面板的中心对齐。
我能够通过添加两行来解决这个问题,将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
一般情况下,在对此类问题进行故障排除时,我会尝试在组件中添加颜色鲜艳的线条边框(在本例中为label
),而不是我想要的那些。就在那时,我意识到它的右边缘与另一个组件用于排列其中心的线条相同。
答案 1 :(得分:2)
阅读Using a Box Layout上的Swing教程中的部分。有一些例子试图解释每个组件的“X对齐”如何影响布局。
如果你描述了你想要做什么,或者你期望发生什么,也许我们可以建议使用不同的布局管理器组合。