|
|
|
@ -106,6 +106,7 @@ public class CopyableJTable extends SortableJTable {
|
|
|
|
|
self.updateEndPoint(-1, column); |
|
|
|
|
self.refreshTable(); |
|
|
|
|
} |
|
|
|
|
self.requestFocusInWindow(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private int getColumn(MouseEvent e) { |
|
|
|
@ -249,26 +250,9 @@ public class CopyableJTable extends SortableJTable {
|
|
|
|
|
FineLoggerFactory.getLogger().info("copy cell value"); |
|
|
|
|
java.util.List<java.util.List<Object>> table = new ArrayList<>(); |
|
|
|
|
if ((startRow != endRow || startCol != endCol) && Math.min(startCol, endCol) > -1) { |
|
|
|
|
for (int i = Math.min(startRow, endRow); i <= Math.max(startRow, endRow); i++) { |
|
|
|
|
table.add(new ArrayList<>()); |
|
|
|
|
for (int j = Math.min(startCol, endCol); j <= Math.max(startCol, endCol); j++) { |
|
|
|
|
Object text = this.getTableValue(i, j); |
|
|
|
|
table.get(table.size() - 1).add(text); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
copyAreaData(table); |
|
|
|
|
} else if (pointList.size() > 0) { |
|
|
|
|
Collections.sort(pointList, Comparator.comparing(Point::getX).thenComparing(Point::getY)); |
|
|
|
|
int startRow = pointList.get(0).x; |
|
|
|
|
int currentRow = startRow; |
|
|
|
|
table.add(new ArrayList<>()); |
|
|
|
|
for (Point point : pointList) { |
|
|
|
|
while (currentRow < point.x) { |
|
|
|
|
table.add(new ArrayList<>()); |
|
|
|
|
currentRow++; |
|
|
|
|
} |
|
|
|
|
Object text = this.getTableValue(point.x, point.y); |
|
|
|
|
table.get(table.size() - 1).add(text); |
|
|
|
|
} |
|
|
|
|
copyPointsData(table); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); |
|
|
|
@ -276,6 +260,35 @@ public class CopyableJTable extends SortableJTable {
|
|
|
|
|
clip.setContents(tText, null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void copyAreaData(java.util.List<java.util.List<Object>> table) { |
|
|
|
|
for (int i = Math.min(startRow, endRow); i <= Math.max(startRow, endRow); i++) { |
|
|
|
|
table.add(new ArrayList<>()); |
|
|
|
|
for (int j = Math.min(startCol, endCol); j <= Math.max(startCol, endCol); j++) { |
|
|
|
|
Object text = this.getTableValue(i, j); |
|
|
|
|
if (text != null) { |
|
|
|
|
table.get(table.size() - 1).add(text); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void copyPointsData(java.util.List<java.util.List<Object>> table) { |
|
|
|
|
Collections.sort(pointList, Comparator.comparing(Point::getX).thenComparing(Point::getY)); |
|
|
|
|
int startRow = pointList.get(0).x; |
|
|
|
|
int currentRow = startRow; |
|
|
|
|
table.add(new ArrayList<>()); |
|
|
|
|
for (Point point : pointList) { |
|
|
|
|
while (currentRow < point.x) { |
|
|
|
|
table.add(new ArrayList<>()); |
|
|
|
|
currentRow++; |
|
|
|
|
} |
|
|
|
|
Object text = this.getTableValue(point.x, point.y); |
|
|
|
|
if (text != null) { |
|
|
|
|
table.get(table.size() - 1).add(text); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Object getTableValue(int row, int col) { |
|
|
|
|
Object value = null; |
|
|
|
|
if (col > -1) { |
|
|
|
|