|
@@ -32,6 +32,7 @@ import java.awt.Dimension;
|
32
|
32
|
import java.awt.event.ActionEvent;
|
33
|
33
|
import java.awt.event.ActionListener;
|
34
|
34
|
|
|
35
|
+import java.util.concurrent.atomic.AtomicInteger;
|
35
|
36
|
import javax.swing.JButton;
|
36
|
37
|
import javax.swing.JPanel;
|
37
|
38
|
import javax.swing.JScrollPane;
|
|
@@ -71,7 +72,7 @@ public final class ErrorListDialog extends StandardDialog implements
|
71
|
72
|
/** Delete all button. */
|
72
|
73
|
private JButton deleteAllButton;
|
73
|
74
|
/** Selected row. */
|
74
|
|
- private int selectedRow = -1;
|
|
75
|
+ private final AtomicInteger selectedRow = new AtomicInteger(-1);
|
75
|
76
|
/** Row being deleted. */
|
76
|
77
|
private boolean rowBeingDeleted = false;
|
77
|
78
|
|
|
@@ -91,7 +92,7 @@ public final class ErrorListDialog extends StandardDialog implements
|
91
|
92
|
layoutComponents();
|
92
|
93
|
initListeners();
|
93
|
94
|
|
94
|
|
- selectedRow = table.getSelectedRow();
|
|
95
|
+ selectedRow.set(table.getSelectedRow());
|
95
|
96
|
|
96
|
97
|
pack();
|
97
|
98
|
}
|
|
@@ -184,11 +185,14 @@ public final class ErrorListDialog extends StandardDialog implements
|
184
|
185
|
deleteButton.setEnabled(false);
|
185
|
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,14 +206,16 @@ public final class ErrorListDialog extends StandardDialog implements
|
202
|
206
|
if (e.getSource() == getCancelButton()) {
|
203
|
207
|
setVisible(false);
|
204
|
208
|
} else if (e.getSource() == deleteButton) {
|
205
|
|
- synchronized (tableModel) {
|
|
209
|
+ synchronized (selectedRow) {
|
206
|
210
|
ErrorManager.getErrorManager().deleteError(tableModel.getError(
|
207
|
|
- table.getRowSorter().convertRowIndexToModel(selectedRow)));
|
|
211
|
+ table.getRowSorter().convertRowIndexToModel(
|
|
212
|
+ table.getSelectedRow())));
|
208
|
213
|
}
|
209
|
214
|
} else if (e.getSource() == sendButton) {
|
210
|
|
- synchronized (tableModel) {
|
|
215
|
+ synchronized (selectedRow) {
|
211
|
216
|
ErrorManager.getErrorManager().sendError(tableModel.getError(
|
212
|
|
- table.getRowSorter().convertRowIndexToModel(selectedRow)));
|
|
217
|
+ table.getRowSorter().convertRowIndexToModel(
|
|
218
|
+ table.getSelectedRow())));
|
213
|
219
|
}
|
214
|
220
|
} else if (e.getSource() == deleteAllButton) {
|
215
|
221
|
ErrorManager.getErrorManager().deleteAll();
|
|
@@ -225,16 +231,22 @@ public final class ErrorListDialog extends StandardDialog implements
|
225
|
231
|
public void tableChanged(final TableModelEvent e) {
|
226
|
232
|
switch (e.getType()) {
|
227
|
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
|
243
|
break;
|
235
|
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
|
250
|
break;
|
239
|
251
|
case TableModelEvent.UPDATE:
|
240
|
252
|
final int errorRow = e.getFirstRow();
|