void (@NotNull JTable table) { ListSelectionModel selectionModel = table.getSelectionModel(); int maxSelectionIndex = selectionModel.getMaxSelectionIndex(); int minSelectionIndex = selectionModel.getMinSelectionIndex(); final int maxColumnSelectionIndex = Math.max(0, table.getColumnModel().getSelectionModel().getMinSelectionIndex()); final int minColumnSelectionIndex = Math.max(0, table.getColumnModel().getSelectionModel().getMaxSelectionIndex()); if(maxSelectionIndex == -1){ return; } Rectangle minCellRect = table.getCellRect(minSelectionIndex, minColumnSelectionIndex, false); Rectangle maxCellRect = table.getCellRect(maxSelectionIndex, maxColumnSelectionIndex, false); Point selectPoint = minCellRect.getLocation(); int allHeight = maxCellRect.y + maxCellRect.height - minCellRect.y; allHeight = Math.min(allHeight, table.getHeight()); table.scrollRectToVisible(new Rectangle(selectPoint, new Dimension(minCellRect.width / 2,allHeight))); }