Browse Source

fixes issue 2585; fixes issue 2584

tags/0.6.3m1rc1
Gregory Holmes 15 years ago
parent
commit
2931346d13
1 changed files with 29 additions and 17 deletions
  1. 29
    17
      src/com/dmdirc/addons/ui_swing/dialogs/error/ErrorListDialog.java

+ 29
- 17
src/com/dmdirc/addons/ui_swing/dialogs/error/ErrorListDialog.java View File

32
 import java.awt.event.ActionEvent;
32
 import java.awt.event.ActionEvent;
33
 import java.awt.event.ActionListener;
33
 import java.awt.event.ActionListener;
34
 
34
 
35
+import java.util.concurrent.atomic.AtomicInteger;
35
 import javax.swing.JButton;
36
 import javax.swing.JButton;
36
 import javax.swing.JPanel;
37
 import javax.swing.JPanel;
37
 import javax.swing.JScrollPane;
38
 import javax.swing.JScrollPane;
71
     /** Delete all button. */
72
     /** Delete all button. */
72
     private JButton deleteAllButton;
73
     private JButton deleteAllButton;
73
     /** Selected row. */
74
     /** Selected row. */
74
-    private int selectedRow = -1;
75
+    private final AtomicInteger selectedRow = new AtomicInteger(-1);
75
     /** Row being deleted. */
76
     /** Row being deleted. */
76
     private boolean rowBeingDeleted = false;
77
     private boolean rowBeingDeleted = false;
77
 
78
 
91
         layoutComponents();
92
         layoutComponents();
92
         initListeners();
93
         initListeners();
93
 
94
 
94
-        selectedRow = table.getSelectedRow();
95
+        selectedRow.set(table.getSelectedRow());
95
 
96
 
96
         pack();
97
         pack();
97
     }
98
     }
184
                 deleteButton.setEnabled(false);
185
                 deleteButton.setEnabled(false);
185
                 sendButton.setEnabled(false);
186
                 sendButton.setEnabled(false);
186
             }
187
             }
187
-            if (rowBeingDeleted) {
188
-                table.getSelectionModel().setSelectionInterval(selectedRow, selectedRow);
189
-                rowBeingDeleted = false;
188
+            synchronized (selectedRow) {
189
+                if (rowBeingDeleted) {
190
+                    table.getSelectionModel().setSelectionInterval(selectedRow.
191
+                            get(), selectedRow.get());
192
+                    rowBeingDeleted = false;
193
+                }
194
+                selectedRow.set(localRow);
190
             }
195
             }
191
-            selectedRow = localRow;
192
         }
196
         }
193
     }
197
     }
194
 
198
 
202
         if (e.getSource() == getCancelButton()) {
206
         if (e.getSource() == getCancelButton()) {
203
             setVisible(false);
207
             setVisible(false);
204
         } else if (e.getSource() == deleteButton) {
208
         } else if (e.getSource() == deleteButton) {
205
-            synchronized (tableModel) {
209
+            synchronized (selectedRow) {
206
                 ErrorManager.getErrorManager().deleteError(tableModel.getError(
210
                 ErrorManager.getErrorManager().deleteError(tableModel.getError(
207
-                        table.getRowSorter().convertRowIndexToModel(selectedRow)));
211
+                        table.getRowSorter().convertRowIndexToModel(
212
+                        table.getSelectedRow())));
208
             }
213
             }
209
         } else if (e.getSource() == sendButton) {
214
         } else if (e.getSource() == sendButton) {
210
-            synchronized (tableModel) {
215
+            synchronized (selectedRow) {
211
                 ErrorManager.getErrorManager().sendError(tableModel.getError(
216
                 ErrorManager.getErrorManager().sendError(tableModel.getError(
212
-                        table.getRowSorter().convertRowIndexToModel(selectedRow)));
217
+                        table.getRowSorter().convertRowIndexToModel(
218
+                        table.getSelectedRow())));
213
             }
219
             }
214
         } else if (e.getSource() == deleteAllButton) {
220
         } else if (e.getSource() == deleteAllButton) {
215
             ErrorManager.getErrorManager().deleteAll();
221
             ErrorManager.getErrorManager().deleteAll();
225
     public void tableChanged(final TableModelEvent e) {
231
     public void tableChanged(final TableModelEvent e) {
226
         switch (e.getType()) {
232
         switch (e.getType()) {
227
             case TableModelEvent.DELETE:
233
             case TableModelEvent.DELETE:
228
-                if (selectedRow >= tableModel.getRowCount()) {
229
-                    selectedRow = tableModel.getRowCount() - 1;
234
+                synchronized (selectedRow) {
235
+                    if (selectedRow.get() >= tableModel.getRowCount()) {
236
+                        selectedRow.set(tableModel.getRowCount() - 1);
237
+                    }
238
+                    table.getSelectionModel().setSelectionInterval(selectedRow.
239
+                            get(),
240
+                            selectedRow.get());
241
+                    rowBeingDeleted = true;
230
                 }
242
                 }
231
-                table.getSelectionModel().setSelectionInterval(selectedRow,
232
-                        selectedRow);
233
-                rowBeingDeleted = true;
234
                 break;
243
                 break;
235
             case TableModelEvent.INSERT:
244
             case TableModelEvent.INSERT:
236
-                table.getSelectionModel().setSelectionInterval(selectedRow,
237
-                        selectedRow);
245
+                synchronized (selectedRow) {
246
+                    table.getSelectionModel().setSelectionInterval(selectedRow.
247
+                            get(),
248
+                            selectedRow.get());
249
+                }
238
                 break;
250
                 break;
239
             case TableModelEvent.UPDATE:
251
             case TableModelEvent.UPDATE:
240
                 final int errorRow = e.getFirstRow();
252
                 final int errorRow = e.getFirstRow();

Loading…
Cancel
Save