JTable 滚动到指定的行索引
2022-08-31 20:25:35
我有一个JTable,它位于一个行中,根据应用程序中发生的事件在运行时添加到表中。我希望在向表中添加新行时,scoll 窗格滚动到表的底部。JScrollPane.
对于 JLists,强制列表中的特定索引可见。我正在寻找同样的东西,但要找一个JTable。看起来我可能必须手动移动滚动窗格上的滚动视图,但我认为必须有一种更简单的方法。[ensureIndexIsVisible][1]()
我有一个JTable,它位于一个行中,根据应用程序中发生的事件在运行时添加到表中。我希望在向表中添加新行时,scoll 窗格滚动到表的底部。JScrollPane.
对于 JLists,强制列表中的特定索引可见。我正在寻找同样的东西,但要找一个JTable。看起来我可能必须手动移动滚动窗格上的滚动视图,但我认为必须有一种更简单的方法。[ensureIndexIsVisible][1]()
这很容易,JTable也有scrollRectToVisible方法。如果需要,您可以尝试类似这样的东西,以便在添加新记录时使滚动窗格转到底部:
jTable1.getSelectionModel().setSelectionInterval(i, i);
jTable1.scrollRectToVisible(new Rectangle(jTable1.getCellRect(i, 0, true)));
其中 i 是上次添加的记录。
请参阅此示例:http://www.exampledepot.com/egs/javax.swing.table/Vis.html
更新:链接现已过时,这是代码(来自 http://smi-protégé.stanford.edu/repos/protege/protege-core/trunk/src/edu/stanford/smi/protege/util/ComponentUtilities.java )
public static 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);
table.scrollRectToVisible(rect);
// Scroll the area into view
//viewport.scrollRectToVisible(rect);
}