Java - JScrollPane 与 JTable 不对齐
Java - JScrollPane Doesn't align with JTable
我正在尝试创建一个宽度为 500 的 JTable。问题是与 table 关联的 JScrollPane 没有出现在 table 旁边。
相关代码如下:
// Create authorsPanel
JPanel authorsPanel = new JPanel(new BorderLayout(5,5));
authorsPanel.setBorder( new TitledBorder("Author Selection") );
// Configure author table
DefaultTableModel authorstableModel = new DefaultTableModel(new String[80][1], new String[]{"Authors"}) {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
JTable authorsTable = new JTable(authorstableModel);
authorsTable.getColumnModel().getColumn(0).setPreferredWidth(500);
authorsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
try {
authorsTable.setAutoCreateRowSorter(true);
} catch(Exception continuewithNoSort) {
}
JScrollPane tableScroll = new JScrollPane(authorsTable);
Dimension tablePreferred = tableScroll.getPreferredSize();
tableScroll.setPreferredSize(new Dimension(500, tablePreferred.height/3));
authorsPanel.add(tableScroll);
这是截图:
当我摆脱线时:
authorsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
然后 table returns 成为面板的全宽,所以我似乎需要这条线。
您使用 BorderLayout 将滚动窗格添加到面板。 BorderLayout 不关心首选大小。使用例如具有适当约束的 GridBagLayout,或者您可以将 BoxLayout(具有水平流)首先放置 table,然后放置一个空面板作为占位符。
BorderLayout
上的 java 文档指出:
The components are laid out according to their preferred sizes and the
constraints of the container's size. The NORTH and SOUTH components
may be stretched horizontally; the EAST and WEST components may be
stretched vertically; the CENTER component may stretch both
horizontally and vertically to fill any space left over.
您已使用 authorsPanel.add(tableScroll)
将 JScrollPane
添加到 JPanel
。所以你基本上是将它添加到 center。所以这将占据整个 space 的空缺。
您的问题的解决方案在于选择不同的布局。我可以推荐 MigLayout,它非常通用,你可以使用它获得各种效果。
我正在尝试创建一个宽度为 500 的 JTable。问题是与 table 关联的 JScrollPane 没有出现在 table 旁边。
相关代码如下:
// Create authorsPanel
JPanel authorsPanel = new JPanel(new BorderLayout(5,5));
authorsPanel.setBorder( new TitledBorder("Author Selection") );
// Configure author table
DefaultTableModel authorstableModel = new DefaultTableModel(new String[80][1], new String[]{"Authors"}) {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
JTable authorsTable = new JTable(authorstableModel);
authorsTable.getColumnModel().getColumn(0).setPreferredWidth(500);
authorsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
try {
authorsTable.setAutoCreateRowSorter(true);
} catch(Exception continuewithNoSort) {
}
JScrollPane tableScroll = new JScrollPane(authorsTable);
Dimension tablePreferred = tableScroll.getPreferredSize();
tableScroll.setPreferredSize(new Dimension(500, tablePreferred.height/3));
authorsPanel.add(tableScroll);
这是截图:
当我摆脱线时:
authorsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
然后 table returns 成为面板的全宽,所以我似乎需要这条线。
您使用 BorderLayout 将滚动窗格添加到面板。 BorderLayout 不关心首选大小。使用例如具有适当约束的 GridBagLayout,或者您可以将 BoxLayout(具有水平流)首先放置 table,然后放置一个空面板作为占位符。
BorderLayout
上的 java 文档指出:
The components are laid out according to their preferred sizes and the constraints of the container's size. The NORTH and SOUTH components may be stretched horizontally; the EAST and WEST components may be stretched vertically; the CENTER component may stretch both horizontally and vertically to fill any space left over.
您已使用 authorsPanel.add(tableScroll)
将 JScrollPane
添加到 JPanel
。所以你基本上是将它添加到 center。所以这将占据整个 space 的空缺。
您的问题的解决方案在于选择不同的布局。我可以推荐 MigLayout,它非常通用,你可以使用它获得各种效果。