Re:Selecionar JTextField dentro de CellEditor em JTable

2 respostas
P

Olá a todos,

Quero agradecer muito o Guilherme pela solução, há dias estou lutando para implementar esse recurso , tentei implentar interface diversas interfaces e nao obtive sucesso, com essa mensagem do Guilherme consegui resolver o problema.
Novamente reforço o meu agradecimento e também ao fórum.

Obrigada a todos.
Patrícia.

2 Respostas

G

Galera,

Enviei um tópico parecido a um tempo, mas algumas outras dúvidas surgiram, por isso resolvi criar outro tópico.
Seguinte, possuo uma JTable, criada com um model a partir de um model que implementei.
Uma das colunas da tabela é composta por Cells que contem um CellEditor, que recebe um JTextField. Ou seja, uma das colunas é editável.

O problema é o seguinte:
Preciso selecionar todo o conteúdo da Cell quando esta é selecionada, ou com o clique do mouse (1 clique) ou quando recebe o foco (através do percurso da tabela com Tab, ou com seta do teclado). Se o faço no MouseListener do JTextField, consigo fazê-lo.

Mas se faço no FocusListener da JTable, nao consigo selecionar o conetudo do JTextField. Alguem saberia em que foco colocar??

Implementação no MouseListener do JTextField. ESTE FUNCIONA, O CONTEUDO É SELECIONADO:

textField.addFocusListener(new FocusListener(){

public void focusGained(FocusEvent arg0) {
			
	int colunaSelecionada = table.getSelectedColumn();
	int linhaSelecionada = table.getSelectedRow();
	if (colunaSelecionada == 3){
				
		DefaultCellEditor editor = (DefaultCellEditor)table.getColumnMode().getColumn(colunaSelecionada).getCellEditor();
		String valorCell = (String)editor.getCellEditorValue();
		TextEMax textField = (TextEMax)editor.getTableCellEditorComponent(table, valorCell, true, linhaSelecionada, colunaSelecionada);
		textField.selectAll();
	}
}

public void focusLost(FocusEvent arg0) {
// TODO Auto-generated method stub
			
}

});

Implementação no FocusListener da JTable. ESTE NÃO FUNCIONA, O CONTEUDO NÃO É SELECIONADO:

table.addFocusListener(new FocusListener(){

public void focusGained(FocusEvent event) {
			
	int linhaSelecionada = table.getSelectedRow();
	int colunaSelecionada = table.getSelectedColumn();
	if (colunaSelecionada == 3){
				
		DefaultCellEditor editor = (DefaultCellEditor)table.getColumnMode().getColumn(colunaSelecionada).getCellEditor();
		String valorCell = (String)editor.getCellEditorValue();
		TextEMax textField = (TextEMax)editor.getTableCellEditorComponent(table, valorCell, true, linhaSelecionada, colunaSelecionada);
		textField.selectAll();
	}
}

public void focusLost(FocusEvent arg0) {
// TODO Auto-generated method stub
			
}

});

Aguardo sugestões!!!

Obrigado, Guilherme

G

Resolvido.

Sobrescreva changeSelection() de JTable:
/*
		 * Coloca a cell no modo de edição quando recebe foco.
		 */
		public void changeSelection(final int row, final int column, boolean toggle, boolean extend){
			
			super.changeSelection(row, column, toggle, extend);
 
            if (editCellAt(row, column))
            	this.getEditorComponent().requestFocusInWindow();
		}

e processFocusEvent() em JTextField:
protected void processFocusEvent(FocusEvent fe) {
			
			if (fe.getID() == FocusEvent.FOCUS_GAINED) 
				selectAll();
			else if (fe.getID() == FocusEvent.FOCUS_LOST) 
				select(0, 0);
			
			super.processFocusEvent(fe);
		}

flws!

Criado 17 de novembro de 2009
Ultima resposta 30 de ago. de 2007
Respostas 2
Participantes 2