如何询问 JTable 中选定的行是否可见?
How to ask if selected row in JTable is visible?
我有这个功能
private static void autoScrollToRow(JTable table) {
JViewport viewport = (JViewport) table.getParent();
Rectangle cellRectangle = table.getCellRect(table.getSelectedRow(), 0, true);
Rectangle visibleRectangle = viewport.getVisibleRect();
table.scrollRectToVisible(new Rectangle(cellRectangle.x, cellRectangle.y, (int) visibleRectangle.getWidth(), (int) visibleRectangle.getHeight()));
}
并且此函数以当前选定行在 tableView 中排在第一位的方式滚动。如何编辑此功能,使其仅在选定行不可见时才滚动?
(类似于 if(table.sellectedRowVisibleOnScreen(true))
)
您的方法中已经有两个可以测试的矩形。
private static void autoScrollToRow(JTable table) {
JViewport viewport = (JViewport) table.getParent();
Rectangle cellRectangle = table.getCellRect(table.getSelectedRow(), 0, true);
Rectangle visibleRectangle = viewport.getVisibleRect();
if (!visibleRectangle.contains(cellRectangle)) {
int width = (int) visibleRectangle.getWidth();
int height = (int) visibleRectangle.getHeight();
table.scrollRectToVisible(new Rectangle(
cellRectangle.x, cellRectangle.y, width, height));
}
}
How to edit this function so it only do scrolling if selected row is out of sight?
你没有做任何特别的事情。
这是 scrollToRect(...)
方法的默认行为(正如我在评论中解释的那样)。
您的方法只需要:
Rectangle cellRectangle = table.getCellRect(table.getSelectedRow(), 0, true);
table.scrollRectToVisible(cellRectangle);
- 如果所选行位于视口顶部上方,则视口将滚动,因此该行位于顶部。
- 如果所选行在视口下方,则视口将滚动,因此该行位于底部。
- 如果所选行已在视口中可见,则不会进行滚动。
我有这个功能
private static void autoScrollToRow(JTable table) {
JViewport viewport = (JViewport) table.getParent();
Rectangle cellRectangle = table.getCellRect(table.getSelectedRow(), 0, true);
Rectangle visibleRectangle = viewport.getVisibleRect();
table.scrollRectToVisible(new Rectangle(cellRectangle.x, cellRectangle.y, (int) visibleRectangle.getWidth(), (int) visibleRectangle.getHeight()));
}
并且此函数以当前选定行在 tableView 中排在第一位的方式滚动。如何编辑此功能,使其仅在选定行不可见时才滚动?
(类似于 if(table.sellectedRowVisibleOnScreen(true))
)
您的方法中已经有两个可以测试的矩形。
private static void autoScrollToRow(JTable table) {
JViewport viewport = (JViewport) table.getParent();
Rectangle cellRectangle = table.getCellRect(table.getSelectedRow(), 0, true);
Rectangle visibleRectangle = viewport.getVisibleRect();
if (!visibleRectangle.contains(cellRectangle)) {
int width = (int) visibleRectangle.getWidth();
int height = (int) visibleRectangle.getHeight();
table.scrollRectToVisible(new Rectangle(
cellRectangle.x, cellRectangle.y, width, height));
}
}
How to edit this function so it only do scrolling if selected row is out of sight?
你没有做任何特别的事情。
这是 scrollToRect(...)
方法的默认行为(正如我在评论中解释的那样)。
您的方法只需要:
Rectangle cellRectangle = table.getCellRect(table.getSelectedRow(), 0, true);
table.scrollRectToVisible(cellRectangle);
- 如果所选行位于视口顶部上方,则视口将滚动,因此该行位于顶部。
- 如果所选行在视口下方,则视口将滚动,因此该行位于底部。
- 如果所选行已在视口中可见,则不会进行滚动。