编辑:如果您对此问题进行了投票,您可以发表评论来解释原因,这将更具建设性。
我得到了这个意想不到的结果......
...使用此代码:
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class TestAlignment extends JFrame {
// Constructor
public TestAlignment() {
super("Test Alignment");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Components to show
JLabel leftLabel = new JLabel("Left");
JButton centerButton = new JButton("Middle");
JLabel rightLabel = new JLabel("Right");
// Add all to box
Box box = Box.createVerticalBox();
box.add(leftLabel);
box.add(centerButton);
box.add(rightLabel);
box.add(Box.createHorizontalStrut(180));
// Align content in box
leftLabel.setAlignmentX(LEFT_ALIGNMENT);
centerButton.setAlignmentX(CENTER_ALIGNMENT);
rightLabel.setAlignmentX(RIGHT_ALIGNMENT);
// Add box to frame, and show frame
box.setOpaque(true);
setContentPane(box);
setVisible(true);
}
// Main
public static void main(String[] args) {
// Create frame in EDT
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() { new TestAlignment(); }
});
}
}
我现在理解这对JComponent.setAlignmentX()
的预期效果如下:此方法告诉组件的哪一侧必须对齐(顶部标签最左侧与按钮中心和底部标签最右侧对齐)。
我想了解如何让每个标签按预期方式对齐直观(左侧标签,右侧标签右侧),标签触及Box的垂直边缘?
(我知道如何将每个标签放入一个Box嵌入,并使用Box.createHorizontalGlue()
强制它向左或向右,但对于简单的对齐目的来说,我觉得太多了。我和#39;我正在寻找更简单的东西)
答案 0 :(得分:1)
不要以为你可以用BoxLayout做到这一点。您的示例确实显示了直观的代码,这些代码并不像您希望的那样有效。
我建议您可能需要使用GridBagLayout。我认为它支持你想要使用它的方式的setAlignmentX(...)方法。
如果没有,则可以使用Relative Layout。它很容易使用,比如BoxLayout,并且在你使用时支持你想要的对齐:
setAlignment( RelativeLayout.COMPONENT );
答案 1 :(得分:0)
您可以使用BoxLyout:
// Components to show
// Left
JLabel leftLabel = new JLabel("Left");
JPanel leftPanel = new JPanel();
leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.X_AXIS));
leftPanel.add(leftLabel);
leftPanel.add(Box.createHorizontalGlue());
// Center
JButton centerButton = new JButton("Middle");
// Right
JLabel rightLabel = new JLabel("Right");
JPanel rightPanel = new JPanel();
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.X_AXIS));
rightPanel.add(Box.createHorizontalGlue());
rightPanel.add(rightLabel);
// Add all to box
Box box = Box.createVerticalBox();
box.add(leftPanel);
box.add(centerButton);
box.add(rightPanel);
box.add(Box.createHorizontalStrut(180));
// Align content in box
// leftLabel.setAlignmentX(LEFT_ALIGNMENT);
centerButton.setAlignmentX(CENTER_ALIGNMENT);
// rightLabel.setAlignmentX(RIGHT_ALIGNMENT);