@ -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 ) {