diff --git a/Mage.Client/src/main/java/mage/client/table/MageTable.java b/Mage.Client/src/main/java/mage/client/table/MageTable.java index d6220f3f318..2162acaf3e6 100644 --- a/Mage.Client/src/main/java/mage/client/table/MageTable.java +++ b/Mage.Client/src/main/java/mage/client/table/MageTable.java @@ -27,16 +27,15 @@ public class MageTable extends JTable { @Override public String getToolTipText(MouseEvent e) { // default tooltip for cells - String tip = null; java.awt.Point p = e.getPoint(); - int rowIndex = rowAtPoint(p); - int colIndex = columnAtPoint(p); - try { - tip = this.getModel().getValueAt(this.convertRowIndexToModel(rowIndex), this.convertColumnIndexToModel(colIndex)).toString(); - } catch (RuntimeException e1) { - //catch null pointer exception if mouse is over an empty line + int viewRow = rowAtPoint(p); + int viewCol = columnAtPoint(p); + int modelRow = TablesUtil.getModelRowFromView(this, viewRow); + int modelCol = this.convertColumnIndexToModel(viewCol); + String tip = null; + if (modelRow != -1 && modelCol != -1) { + tip = this.getModel().getValueAt(modelRow, modelCol).toString(); } - return GUISizeHelper.textToHtmlWithSize(tip, GUISizeHelper.tableFont); } diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index e2e9a952492..88e70cd985c 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -387,9 +387,12 @@ public class TablesPanel extends javax.swing.JPanel { table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { - int row = e.getFirstIndex(); - String rowId = TablesUtil.getSearchIdFromTable(table, row); - tablesLastSelection.put(table, rowId); + int modelRow = TablesUtil.getSelectedModelRow(table); + if (modelRow != -1) { + // needs only selected + String rowId = TablesUtil.getSearchIdFromTable(table, modelRow); + tablesLastSelection.put(table, rowId); + } } }); @@ -401,9 +404,11 @@ public class TablesPanel extends javax.swing.JPanel { @Override public void run() { String lastRowID = tablesLastSelection.get(table); - int needRow = TablesUtil.findTableRowFromSearchId(table.getModel(), lastRowID); - if (needRow != -1) { - table.addRowSelectionInterval(needRow, needRow); + int needModelRow = TablesUtil.findTableRowFromSearchId(table.getModel(), lastRowID); + int needViewRow = TablesUtil.getViewRowFromModel(table, needModelRow); + if (needViewRow != -1) { + table.clearSelection(); + table.addRowSelectionInterval(needViewRow, needViewRow); } } }); @@ -415,9 +420,9 @@ public class TablesPanel extends javax.swing.JPanel { table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - int row = table.getSelectedRow(); - if (e.getClickCount() == 2 && row != -1) { - action.actionPerformed(new ActionEvent(table, ActionEvent.ACTION_PERFORMED, TablesUtil.getSearchIdFromTable(table, row))); + int modelRow = TablesUtil.getSelectedModelRow(table); + if (e.getClickCount() == 2 && modelRow != -1) { + action.actionPerformed(new ActionEvent(table, ActionEvent.ACTION_PERFORMED, TablesUtil.getSearchIdFromTable(table, modelRow))); } } }); diff --git a/Mage.Client/src/main/java/mage/client/table/TablesUtil.java b/Mage.Client/src/main/java/mage/client/table/TablesUtil.java index 48a0ca3bffa..6fd2b8445ee 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesUtil.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesUtil.java @@ -43,4 +43,21 @@ public class TablesUtil { return row; } + public static int getSelectedModelRow(JTable table) { + return getModelRowFromView(table, table.getSelectedRow()); + } + + public static int getModelRowFromView(JTable table, int viewRow) { + if (viewRow != -1 && viewRow < table.getModel().getRowCount()) { + return table.convertRowIndexToModel(viewRow); + } + return -1; + } + + public static int getViewRowFromModel(JTable table, int modelRow) { + if (modelRow != -1 && modelRow < table.getModel().getRowCount()) { + return table.convertRowIndexToView(modelRow); + } + return -1; + } }