У меня есть JPanel, содержащий 3 JScrollPanes (каждый содержит Jtable), добавленный с boxlayout, поэтому я вижу 3 таблицы на странице и загружаю данные динамически, логика кода почти одинакова для 3 таблиц и только для имен столбцов ирендеринг некоторых ячеек отличается. Для каждой таблицы я хотел иметь автоматическую прокрутку к нижней части таблицы, когда новые строки добавляются в таблицу, первые две таблицы работают идеально, а полоса прокрутки переходит к нижней части таблицы, но полоса прокрутки этой последней таблицы делает странные вещи!Я использую точно такой же метод прокрутки для 3 таблиц, но первые 2 работы это не работает!
Любые идеи?
Я удалил некоторые столбцы, добавив код для ясности, но это идея;
private JScrollPane fillThirdTable(ArrayList<DisplayVariable> displayList) {
DefaultTableModel model = new DefaultTableModel();
ToolTipTable answer = new ToolTipTable(model);
answer.setRowHeight(60);
answer.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
answer.setSize(1300, 400);
DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
dtcr.setHorizontalAlignment(SwingConstants.CENTER);
answer.getColumn("Display Variable ID").setCellRenderer(dtcr);
JScrollPane scrollPane = null;
for (DisplayVariable var : displayList) {
model.addRow(new Object[] { id, shown, name, value });
answer.setFillsViewportHeight(true);
}
TableColumn c= answer.getColumnModel().getColumn(3);
c.setCellRenderer(new MultiLineCellRenderer());
TableColumn c2= answer.getColumnModel().getColumn(2);
c2.setCellRenderer(new MultiLineCellRenderer());
scrollPane = new JScrollPane(answer);
scrollPane.setSize(1300, 400);
//here I call the method
scrollToVisible(answer, (displayList.size()-1), 1);
return scrollPane;
}
и это метод автопрокрутки;
public void scrollToVisible(JTable table, int rowIndex, int vColIndex) {
if (!(table.getParent() instanceof JViewport)) {
return;
}
JViewport viewport = (JViewport)table.getParent();
// This rectangle is relative to the table where the
// northwest corner of cell (0,0) is always (0,0).
Rectangle rect = table.getCellRect(rowIndex, vColIndex, true);
// The location of the viewport relative to the table
Point pt = viewport.getViewPosition();
// Translate the cell location so that it is relative
// to the view, assuming the northwest corner of the
// view is (0,0)
rect.setLocation(rect.x-pt.x, rect.y-pt.y);
// Scroll the area into view
viewport.scrollRectToVisible(rect);
}