Combinando JXTable com RXTable
Quero os recursos de JXTable com o comportamento "selecionar tudo ao editar" de RXTable. Fazer uma substituição simples seria bom, mas a função de clique duplo do RXTable não funciona com o JXTable. Ao usar o modo Ação do botão, tudo bem, mas ao usar o F2 ou um clique duplo, algo no JXTable entra em conflito com o RXTable e remova a seleção para que eu fique com o comportamento padrão. É por causa do GenericEditor que ele usa internamente ou é outra coisa?
Como posso fazer com que o JXTable selecione tudo no F2 ou clique duas vezes em edita
EDIT: Parece que isso só acontece quando o modelo tem a coluna definida para o tipo Inteiro. Funciona como esperado quando definido para uma coluna String ou Objec
SoluçãGraças à correção do kleopatra, consegui alterar o método selectAll para que ele lida com o JFormattedTextFields e todos os casos de edição. Como o código original funcionou no tipo de edição, usei a correção para outros casos. Aqui está o que eu acabei.
Substitua selectAll no RXTable pelo seguinte:
/*
* Select the text when editing on a text related cell is started
*/
private void selectAll(EventObject e)
{
final Component editor = getEditorComponent();
if (editor == null
|| ! (editor instanceof JTextComponent
|| editor instanceof JFormattedTextField))
return;
if (e == null)
{
((JTextComponent)editor).selectAll();
return;
}
// Typing in the cell was used to activate the editor
if (e instanceof KeyEvent && isSelectAllForKeyEvent)
{
((JTextComponent)editor).selectAll();
return;
}
// If the cell we are dealing with is a JFormattedTextField
// force to commit, and invoke selectall
if (editor instanceof JFormattedTextField) {
invokeSelectAll((JFormattedTextField)editor);
return;
}
// F2 was used to activate the editor
if (e instanceof ActionEvent && isSelectAllForActionEvent)
{
((JTextComponent)editor).selectAll();
return;
}
// A mouse click was used to activate the editor.
// Generally this is a double click and the second mouse click is
// passed to the editor which would remove the text selection unless
// we use the invokeLater()
if (e instanceof MouseEvent && isSelectAllForMouseEvent)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
((JTextComponent)editor).selectAll();
}
});
}
}
private void invokeSelectAll(final JFormattedTextField editor) {
// old trick: force to commit, and invoke selectall
editor.setText(editor.getText());
SwingUtilities.invokeLater(new Runnable() {
public void run() {
editor.selectAll();
}
});
}