, .
selectAll() invokeLater(), , (, , "" ?)
Swing mouseReleased() , :
at javax.swing.text.JTextComponent.fireCaretUpdate(Unknown Source)
at javax.swing.text.JTextComponent$MutableCaretEvent.fire(Unknown Source)
at javax.swing.text.JTextComponent$MutableCaretEvent.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.repostEvent(Unknown Source)
:
, , , , selectAll(). - , , editCellAt() JTable.
private class SelectAllCellEditor extends DefaultCellEditor
{
public SelectAllCellEditor( JTextField tf )
{
super( tf );
}
boolean listenerInstalled = false;
boolean overrideDeselection = false;
@Override
public Component getTableCellEditorComponent( JTable table , Object value , boolean isSelected , int row , int column )
{
final JFormattedTextField tf = ( JFormattedTextField ) super.getTableCellEditorComponent( table , value , isSelected , row , column );
if( !listenerInstalled )
{
tf.addCaretListener( new CaretListener( )
{
int lastDot = 0;
int lastMark = 0;
@Override
public void caretUpdate( CaretEvent e )
{
if( overrideDeselection )
{
int length = tf.getText( ) == null ? 0 : tf.getText( ).length( );
boolean wasAllSelected = ( lastDot == 0 && lastMark == length ) || ( lastDot == length && lastMark == 0 );
boolean nowNoneSelected = ( e.getDot( ) == 0 && e.getMark( ) == 0 ) || ( e.getDot( ) == length && e.getMark( ) == length );
if( wasAllSelected )
{
overrideDeselection = false;
if( nowNoneSelected )
{
tf.selectAll( );
}
}
}
lastDot = e.getDot( );
lastMark = e.getMark( );
}
} );
listenerInstalled = true;
}
overrideDeselection = true;
tf.selectAll( );
return tf;
}
}