Olá pessoal , tenho um problema que esta me deixando quase 'doido’pois ja estou 3 dias martelando em cima disso e naum saio do lugar.
Meu problema é o seguinte, tenho um formulario onde eu prencho os dados e clico em salvar e eles são guardados em uma das linhas da list de strings (SWT do eclipse). Diante disso, o que eu não consigo fazer é o seguinte é clicar sobre umas dessas linhas ou elementos e carregar cada item em seus respectivos text’s.
Quero saber o que eu preciso para 'quebrar’esses elementos? pensei em substring, não sei se estou certo, pq nunca usei substring. Não sei se estou sendo claro… mas tentei. O metódo que estou usando mostra todos os elementos em uma linha só.
[b]// metodo para percorrer a lista e setar o item nas texts - setando apenas na txtBanco[/b]
lista.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event e) {
String banco = txtBanco.getText();
String[] items = lista.getSelection();
for (int i = 0; i<items.length; i++)
banco = items[i];
txtBanco.setText(banco);
System.out.println (" Conexão Selecionada: " + banco);
[b]// adicionar elementos a lista [/b]
final Button btnSalvar = new Button(shell, SWT.PUSH);
btnSalvar.setText(" Salvar ");
btnSalvar.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
String data = String.valueOf ( " " + txtBanco.getText()+ " " + comboDriver.getText() + " " +
comboURL.getText()+ " " + txtUsuario.getText()+ " " +
txtSenha.getText()+ " " + txtSchema.getText()+ " " +
txtCache.getText()+ " " + comboRead.getText());
lista.add(data);
Eu acho que vc está fazendo isso da forma errada, em vez de jogar esses dados em uma strig porque vc não joga em um objeto, crie uma classe com os campos do formulário dai na hora de salvar vc seta no objeto, e depois é só vazer o inverso
este objeto vc pode colocar no obeto item
Eu trabalho com SWT e fasso isso de uma forma bem simples.
hum acho que não fui muito claro, se não enteder seja mais especifico sobre o que vc esta fazendo que tento te ajudar
Olha só … tenho uma tela que contem uma list e varios text’s onde o usuario digita as informações e pressiona salvar. As informações contidas nos campos txt vão para dentro dessa list. Só que na list precisa aparecer apenas o nome do 'Banco’p: ex , e quando clicar em cima desse ‘nome’ as informações serão carregadas na tela novamente.
Fiz uma classe com os respectivos atributos, metodos get e set e construtor, e na classe principal fiz umas coisinhas só que não to conseguindo terminar.
OBS: Teste é o nome da classe que contém os atributos …etc… vou dar mais uma mexida, ver o que eu consigo fazer…
Agora entendi o que vc quer fazer, pensei que vc tava falando do List do java.util
É o seguinte, essa forma que vc está implementando não é adequada, vc não pode colocar todos os dados na mesma String, porque dai é obvio que todos os dados vão aparecer na List. Eu faria o seguinte, criaria um ArrayList de objetos Teste, dái coforme eu for salvando iria jogando os dados no objeto Teste e o colocando no ArrayList, até aqui acho que ficou claro, quando eu salvar um objeto Teste eu também adicionaria no List apenas a String que contém o nome do banco.
Dessa forma os elementos do ArrayList e do List ficariam com a mesma ordem numerica, ou seja, o elemento 0 do List seria correspondente do elemento 0 do ArrayList, dái pra recuperar as informações fica fácil
filista.addListener (SWT.Selection, new Listener () {
@Override
public void handleEvent(Event event) {
int intemSelct = list.getSelectionIndex();
Teste teste = arrayList.get(intemSelct);
txtBanco.setText(teste.getBanco());
comboDriver.setText(test.getDriver));
.
.
.
System.out.println (" Conexão Selecionada: " + banco);
}
});
Ainda da pra melhorar esse código que fiz, mas acho que ja da pra ter uma ideia.
Eu ontem a tarde pensei em fazer desta forma e fiz algo parecido com o seu, no entanto não consigo criar o array , parece ser um erro idiota, mas o naum to conseguindo. toda vez que tento fazer esse codigo da erro. O eclipse me mostra algumas soluções possiveis mas naum da certo, me diz pra criar um objeto teste, ou adicionar um cast do tipo :Teste teste = (Teste) ArrayList.get(itemSelect);
Vou lutar mais um pouco aqui, se puder me dar um toque agradeço, desde já. OBS: to criando o Array conforme me informou no post anterior.
Acho que vc não aprendeu mexer com genéricos, pra falar verdade eu também não estou bem familiarizado com isso
Normalmente eu faço assim:
List<Teste> array = new ArrayList<Teste>();
Teste teste = array.get(intemSelected);
Importante: aquele List ali é do java.util e não tem nada a haver com o componente gráfico so SWT, tem que tomar cuidado com isso na hora de fazer os imports, se java.util.List não for importado o compilador vai tentar pegar o List do SWT da vai dar incompatibilidade mesmo.
Pois éh … não conheço muito bein o genérico, mas ainda da tempo pra aprender… Só que tem uma coisa, vou ter que mudar os metodos, pq agora quando clico em salvar naum carega nenhum campo mais, entaum vou ter fazer essa logica dentro do metodo do botao salvar?
mais ou menos, isso está acontecendo porque a list está vazia e vc está tentando recuperar o primeiro elemento, mas o primeiro elemento ainda não existe
provavelmente vc esqueceu de colocar o list.add(test) ou algo do tipo
Eu coloquei… naum sei realmente o que fazer… meu conhecimento acabou agora ficou só a força de vontade de fazer isso funcionar. O codigo abaixo mostra como ficou.
lista.addListener (SWT.Selection, new Listener () {
@Override
public void handleEvent(Event event) {
int itemSelect = lista.getSelectionIndex();
ArrayList <Teste> array = new ArrayList<Teste>();
Teste teste = array.get(itemSelect);
txtBanco.setText(teste.getBanco());
comboDriver.setText(teste.getDriver());
comboURL.setText(teste.getURL());
txtUsuario.setText(teste.getUsuario());
txtSenha.setText(teste.getSenha());
txtSchema.setText(teste.getSenha());
txtCache.setText(teste.getCache());
comboRead.setText(teste.getRead());
lista.add(teste.getBanco());
}
});
final Button btnSalvar = new Button(shell, SWT.PUSH);
btnSalvar.setText(" Salvar ");
btnSalvar.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
Teste dados[] = new Teste[10];
String Banco = txtBanco.getText();
String Driver = comboDriver.getText();
String URL = comboURL.getText();
String Usuario = txtUsuario.getText();
String Senha = txtSenha.getText();
String Schema = txtSchema.getText();
String Cache = txtCache.getText();
String Read = comboRead.getText();
dados[0] = new Teste(Banco , Driver , URL , Usuario , Senha , Schema , Cache , Read);
lista.add(Banco);
System.out.println (" Conexão Selecionada: " + Banco);
ArrayList <Teste> arrayList = new ArrayList<Teste>();/*isso tem que ficar fora, senão todas as vezes que clicar em alguns intem da lista ele vai reiiniciar o ArrayList*/
# lista.addListener (SWT.Selection, new Listener () {
# @Override
# public void handleEvent(Event event) {
#
# int itemSelect = lista.getSelectionIndex();
#
# Teste teste = array.get(itemSelect);
#
# txtBanco.setText(teste.getBanco());
# comboDriver.setText(teste.getDriver());
# comboURL.setText(teste.getURL());
# txtUsuario.setText(teste.getUsuario());
# txtSenha.setText(teste.getSenha());
# txtSchema.setText(teste.getSenha());
# txtCache.setText(teste.getCache());
# comboRead.setText(teste.getRead());
#
# }
# });
#
# final Button btnSalvar = new Button(shell, SWT.PUSH);
# btnSalvar.setText(" Salvar ");
# btnSalvar.addSelectionListener(new SelectionAdapter() {
# @Override
# public void widgetSelected(SelectionEvent event) {
#
# // Teste dados[] = new Teste[10]; pra que isso ? Apague essa linha
#
# String Banco = txtBanco.getText();
# String Driver = comboDriver.getText();
# String URL = comboURL.getText();
# String Usuario = txtUsuario.getText();
# String Senha = txtSenha.getText();
# String Schema = txtSchema.getText();
# String Cache = txtCache.getText();
# String Read = comboRead.getText();
#
# Teste novoTeste = new Teste(Banco , Driver , URL , Usuario , Senha , Schema , Cache , Read);
# list .add(novoTeste.getBanco()); // ponto 1
# arrayList .add(novoTeste); //ponto 2
# System.out.println (" Conexão Selecionada: " + Banco.getText());
Repare ali onde eu escrevi ponto1 e ponto 2, no ponto 1 vc está adicionando uma string no componente grafico List. No ponto 2 vc está adicionando no ArrayList (que uma espécie de vetor, so que muito mais eficiente) o objeto novoTeste
Graças a vc funcionou, naum sei nem como agradeçer, se você morasse em joinville eu ti pagava uma cerveja…Agora vou estudar um pouco esse código pra ver se eu entendi na pratica. Vlw msm!!!