JLabel不是从测线开始,也不是从中心开始。有点介于两者之间
我不确定您的确切代码是什么,以及如何将自定义面板嵌套到另一个面板中。
但是正如我上面提到的,当你有奇怪的对齐方式时,你需要确保每个组件都有相同的x对齐方式,这样它们可以以相同的方式对齐。
我无法使用下面的简单示例重现您的问题:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class SSCCE extends JPanel
{
SSCCE()
{
JPanel box = new JPanel();
box.setLayout( new BoxLayout(box, BoxLayout.Y_AXIS) );
box.setBorder( new LineBorder(Color.RED) );
JTextField textField = new JTextField(10);
//textField.setAlignmentX(JComponent.LEFT_ALIGNMENT);
System.out.println( textField.getAlignmentX() );
box.add( textField );
JLabel label = new JLabel("Some text");
System.out.println( label.getAlignmentX() );
box.add( label );
add( box );
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new SSCCE());
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args) throws Exception
{
java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
但是,从输出中可以看到,默认情况下,文本字段具有中心对齐和标签左对齐。试着让它们都左对齐。