将JLabel与BoxLayout内的左侧或右侧对齐,并使用JPanel的{Y_AXIS约束

时间:2017-09-16 16:23:11

标签: java swing jlabel layout-manager boxlayout

我有一个带有约束Y_Axis的JPanel,这样每当我添加一个新的Component时,它会自动添加到一个新的Line上。但问题是Label里面没有对齐左边或右边。它显示在JTable上方一定距离处。 JLabel如何在所需的Alginment上显示。

JPanel panel = new JPanel();

panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));

然后我在面板中添加了一个JLabel。

JLabel labelSemester = new JLabel("Semester 1: ",SwingConstants.LEFT);
panel.add(labelSemester);

在标签之后,我添加了一个新的JTable内部面板,

// Column Names for the Table
Object[] col_names = {"ID", "Name", "CH", "Marks", "Grade"};
// row data for the table
Object[][] table_rows = {{"CS123","Introduction to Computing",3,80,"A-"}};// One row only

JTable table = new JTable(table_rows, col_names);

panel.add(new JScrollPane(table));

然后我添加了一个JFrame并添加了Panel以在框架中显示

JFrame frame = new JFrame();
// frame Title
frame.setTitle("DMC");
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

// adding panel inside frame
frame.add(panel);

// displaying frame
frame.show()

注意: 我添加了自动调整JTable列宽的代码。 Output can be seen from attached Image

1 个答案:

答案 0 :(得分:3)

添加到BoxLayout的所有组件都需要相同的alignmentX,否则您可能会获得一些奇怪的布局:

//JLabel labelSemester = new JLabel("Semester 1: ",SwingConstants.LEFT);
JLabel labelSemester = new JLabel("Semester 1: ");
label.semester.setAlignmentX(JLabel.LEFT_ALIGNMENT);
panel.add(labelSemester);

...

JTable table = new JTable(table_rows, col_names);
//panel.add(new JScrollPane(table));
JScrollPane scrollPane = new JScrollPane( table );
scrollPane.setAlignmentX(JScrollPane.LEFT_ALIGNMENT);
panel.add( scrollPane );

阅读Fixing Alignment Problems上Swing BoxLayout教程中的部分以获取更多信息。保留所有Swing基础知识的教程链接。