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

问题描述 投票:0回答:1

我有一个带有 Y_Axis 约束的 JPanel,这样每当我添加新组件时,它都会自动添加到新行上。但问题是里面的标签没有左对齐或右对齐。它显示在 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

java swing jlabel layout-manager boxlayout
1个回答
12
投票

添加到

BoxLayout
的所有组件都需要相同的
alignmentX
,否则你会得到一些奇怪的布局:

// JLabel labelSemester = new JLabel("Semester 1: ",SwingConstants.LEFT);
JLabel labelSemester = new JLabel("Semester 1: ");
labelSemester.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);

阅读 Swing BoxLayout 教程中关于“修复对齐问题”的部分,了解更多信息。保留所有 Swing 基础知识教程的链接。

© www.soinside.com 2019 - 2024. All rights reserved.