将JScrollPane组件添加到JTable列

我正在尝试将滚动function添加到JTable中的某个列。 我已经实现了一个自定义的TableCellRenderer组件,我可以看到表中的滚动窗格很好,但我无法滚动它。 我也尝试过实现TableCellEditor,但没有任何运气。

public Component getTableCellEditorComponent(JTable arg0, Object arg1, boolean arg2, int arg3, int arg4) { return scrollPane; } 

有没有人有任何想法如何使包含scrollPane的单元格可滚动?

使用TableCellRenderer时,无法添加任何滚动行为,因为它不接收任何事件并仅绘制组件。 但是,有可能通过使用带有getTableCellEditor的自定义TableCellEditor来实现此目的:

 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { JTextArea area = new JTextArea(); area.setLineWrap(true); area.setText((String) value); JScrollPane pane = new JScrollPane(area); return pane; } 

此外,您必须控制CellEditor的编辑行为。 为了使单元格始终可编辑和可滚动, isCellEditable应如下所示:

 public boolean isCellEditable(EventObject anEvent) { return true; } 

就个人而言,我发现这个解决方案更像是一个黑客而不是任何东西。 此外,这应该仅用于测试。 在我看来,你真的必须实现更好的编辑行为。

渲染器只是绘制细胞。 我相信你需要实现一个TableCellEditor来滚动。

作为替代方案,请考虑将单个滚动窗格放在单独的容器中,并在选择侦听器中更新它的视图。