Java 对齐机箱中的组件
编辑:如果你否决了这个问题,你可以留下评论来解释原因,这将更有建设性 我得到了这个意想不到的结果 。。。使用此代码:Java 对齐机箱中的组件,java,swing,alignment,layout-manager,boxlayout,Java,Swing,Alignment,Layout Manager,Boxlayout,编辑:如果你否决了这个问题,你可以留下评论来解释原因,这将更有建设性 我得到了这个意想不到的结果 。。。使用此代码: 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 {
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.createHorizontalGlue()
将其强制向左或向右,但对我来说,为了对齐的简单目的似乎太多了。我正在寻找更简单的方法)不要认为用BoxLayout可以做到这一点。您的示例确实显示了直观的代码,但并不像您希望的那样工作
我建议您可能需要使用GridBagLayout。我认为它支持setAlignmentX(…)方法,正如您所希望的那样
如果没有,则可以使用。它与BoxLayout一样易于使用,并且在使用时支持所需的对齐方式:
setAlignment( RelativeLayout.COMPONENT );
您可以使用BoxlOut:
// 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);
我已经知道使用胶水可以做到这一点。如前所述,我正在寻找更简单的东西,如果它存在的话。无论如何,谢谢你的回答。如果你花了一点时间阅读有用的标签弹出窗口,你会意识到这与标签的定义无关。。