Java Swing BoxLayout忽略AlignmentX
在下面的代码中,通过使用Java Swing BoxLayout忽略AlignmentX,java,swing,boxlayout,Java,Swing,Boxlayout,在下面的代码中,通过使用Component.LEFT_ALIGNMENT调用setAlignmentX,我希望在居中的滑块上获得一个左对齐的标签。出于某种原因,标签也居中,似乎与传递给setAlignmentX的值无关 我必须传递给setAlignmentX什么值才能使其左对齐 package myjava; import java.awt.Component; import java.awt.Container; import javax.swing.BoxLayout; import ja
Component.LEFT_ALIGNMENT
调用setAlignmentX
,我希望在居中的滑块上获得一个左对齐的标签。出于某种原因,标签也居中,似乎与传递给setAlignmentX的值无关
我必须传递给setAlignmentX什么值才能使其左对齐
package myjava;
import java.awt.Component;
import java.awt.Container;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
public class LayoutTest {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("BoxLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// create left aligned label over centered column
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
JLabel label = new JLabel("test");
label.setAlignmentX(Component.LEFT_ALIGNMENT);
contentPane.add(label);
contentPane.add(new JSlider());
frame.pack();
frame.setVisible(true);
}
});
}
}
基本上,在BoxLayout中不能有不同的对齐方式,从 通常,所有组件都由自上而下的BoxLayout控制 对象应具有相同的X对齐方式 编辑 通常,没有记录组件类型的默认对齐方式(默认情况下JSlider居中,我错误地认为JLabel在左对齐时居中;-)一个选项是将列表保留在某个位置(doooh…),另一个选项是在添加时将它们全部强制到相同的对齐方式
或者使用第三方layoutManager,它不会(对我来说)将布局和对齐混合在一起。尝试改用
GridBagLayout
:
我读了那页,但我认为滑块“没有”对齐。在所有组件上强制执行相同对齐的最佳方式是什么?不直观的是今天的轻描淡写。但至少我现在已经开始工作了。谢谢!:)
public class Aligment {
public static void main(String[] args) {
final JPanel root = new JPanel(new GridBagLayout());
root.setPreferredSize(new Dimension(500, 400));
root.add(new JLabel("LEFT"), new GridBagConstraints() {{
gridx = 0;
gridy = 0;
anchor = PAGE_START;
}});
root.add(new JLabel("CENTER"), new GridBagConstraints() {{
gridx = 1;
gridy = 1;
anchor = CENTER;
weightx = 1.0; // fill Width
}});
root.add(new JLabel("RIGHT"), new GridBagConstraints() {{
gridx = 2;
gridy = 2;
anchor = LINE_END;
}});
// hack: Push all rows to Top
root.add(Box.createVerticalGlue(), new GridBagConstraints() {{
gridx = 0;
gridy = 3;
weighty = 1.0; // fill Height
}});
new JFrame() {
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(root);
pack();
setLocationRelativeTo(null);;
}
}.setVisible(true);
}
}