Localizar um registro em uma table SWT... [RESOLVIDO]

Bom dia a todos!

Estou desenvolvento um sistema em SWT, e tenho uma tela de busca de produtos. Nela tenho um campo(Text) para digitação e logo abaixo uma table que exibe os produtos. Gostaria de adicionar uma funcionalidade a essa tela… Conforme o usuário for digitando no Text, o sistema vai selecionando na table o produto que tem o mesmo nome que foi digitado pelo usuário…

Àqueles que puderem me ajudar, muito obrigado!

Douglas

Olá pessoal, consegui fazer…

Criei uma instância da interface ModifyListener nela implementei o método modifyText(ModifyEvent e) e adicionei ao Text o método addModifyListener(ModifyListener listener), e no parâmetro do método passei a instância que tinha criado da interface ModifyListener…

E dentro do método modifyText(ModifyEvent e), apenas fiz as comparações com o conteúdo do Text e cada uma das linhas da Table…

Desculpe se não fui tão claro, ainda sou novo por aqui! Tenho muito a aprender ainda…

Espero que possa ajudar alguém…

Abrs

Douglas, tranquilo?

Se você puder me ajudar ou tiver um exemplo para me enviar, eu ficarei muito grato.

Estou seguindo sua ideia abaixo mais nao estou obtendo sucesso.

Desde já Obrigado.

Então leandro, o que eu fiz foi o seguinte. Primeiro criei uma instância de ModifyListener… Que é responsável por “monitorar” modificações em um Text do SWT.

ModifyListener listener = new ModifyListener() { public void modifyText(ModifyEvent e) { valueChanged((Text) e.widget, null); } };

O código do método “valueChanged” ficou assim…

[code]
private void valueChanged(Text text, Boolean down) {
try {
String textoPesquisa = text.getText().toUpperCase();

		if(down != null) {
			int i = ((table.getSelectionIndex() == -1) ? 0 : table.getSelectionIndex());
			
			if(zerarContador) {
				i = 0;
				zerarContador = false;
			}
			
			if(down) {
				i++;
				for( ; i < table.getItemCount(); i++) {
					if(itensTable[i].getText(1).contains(textoPesquisa)) {
						table.setSelection(i);
						break;
					}
				}
			} else {
				i--;
				for( ; i >= 0; i--) {
					if(itensTable[i].getText(1).contains(textoPesquisa)) {
						table.setSelection(i);
						break;
					}
				}
			}
			
			if(i == (table.getItemCount() - 1)) {
				zerarContador = true;
			}
		} else {
			int j = ((table.getSelectionIndex() == -1) ? 0 : table.getSelectionIndex());
			
			for(; j < table.getItemCount(); j++) {
				if(itensTable[j].getText(1).contains(textoPesquisa)) {
					table.setSelection(j);
					break;
				}
			}
			
			if(j == table.getItemCount()) {
				table.setSelection(0);
				table.deselect(0);
			}
		}
	} catch(Exception ex) {
		System.out.println(ex.getMessage());
	}
}[/code]

E por fim, foi só adicionar o listener instanciado anteriormente no ModifyListener do Text em questão, no meu caso é o tBusca…

tBusca.addModifyListener(listener);

Espero ter sido claro…

Abrs

Douglas

Douglas, obrigado por enquanto.

Mais estou com outro problema, não estou conseguindo armazenar os dados na tabela no itensTable.
Pode me dar uma ajudar?
Está ficando nulo.

Obrigado.

Então Leandro…

O array “itensTable” é uma instância de TableItem. Neste objeto é possível armazenar as linhas de uma table do SWT. No meu caso, eu criei um array para que eu pudesse receber todas as linhas da table, através do método table.getItems(). Ou seja, o método getItems() da classe Table, retorna TableItem[].

Ex: TableItem[] itensTable = table.getItems();

Douglas, estou apanhando ainda aqui, desculpe é que estou começando.
Você pode passar está rotina inteira? Tá dificil aqui.

Obrigado.

Poxa, leandro me desculpe… Não tinha entendido a mensagem… Para adicionar dados na Table faça o seguinte…

TableItem linha = TableItem(table, SWT.NONE);

Lembrando que o primeiro parâmetro do construtor de TableItem deve ser o nome da instância do objeto Table…

Depois de instanciar o TableItem, você passa um array de String para que os dados sejam inseridos na table. Da seguinte forma:

String[] texto = {"xxxx", "xxxxx", "xxxx", "xxxx"};
linha.setText(texto);

Obrigado.