Author: tchemit Date: 2012-07-30 20:29:11 +0200 (Mon, 30 Jul 2012) New Revision: 2452 Url: http://nuiton.org/repositories/revision/jaxx/2452 Log: 2214: Add method in SwingUtil to auto-select a cell content in a table when the cell is selected Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2012-07-30 17:34:31 UTC (rev 2451) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2012-07-30 18:29:11 UTC (rev 2452) @@ -50,10 +50,13 @@ import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTree; +import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.HyperlinkEvent; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.table.DefaultTableCellRenderer; @@ -1296,4 +1299,42 @@ + (model.getColumnCount() - 1) + "]"); } } + + /** + * Add to a given table a selec tion model listener to always scroll to + * current cell selection. + * + * @param table the table + * @since 2.5.3 + */ + public static void scrollToTableSelection(final JTable table) { + + table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + ListSelectionModel listSelectionModel = + (ListSelectionModel) e.getSource(); + int firstIndex = e.getFirstIndex(); + int lastIndex = e.getLastIndex(); + Integer newSelectedRow = null; + + if (listSelectionModel.isSelectionEmpty()) { + + // no selection + } else if (listSelectionModel.isSelectedIndex(firstIndex)) { + + // use first index + newSelectedRow = firstIndex; + } else if (listSelectionModel.isSelectedIndex(lastIndex)) { + + // use last index + newSelectedRow = lastIndex; + } + if (newSelectedRow != null) { + Rectangle rect = table.getCellRect(newSelectedRow, 0, true); + table.scrollRectToVisible(rect); + } + } + }); + } }