Eventos "static"

4 respostas
N

Caso: Estou fazendo uma lista de JPanels, cada JPanel dessa lista deve ter um indice, para que posteriormente eu possa alterara-lo ou deleta-lo.
Problema: Estou tendo problemas com os eventos do botão deletar, quando tento deletar algum item da lista, ele só deleta o ultimo.
Pois a classe ActionListener gera um contexto static, então toda vez que tento chamar esses eventos ele espera que os metodos que eu tentar chamar a partir deste evento sejam static. Dessa forma, o índice será sempre o mesmo, para todos os itens da minha lista (por isso só deleta o último ítem da lista).
Exemplo: Se eu tiver 10 ítens na minha lista, o índece desses 10 ítens será igual a 10 para todos os itens.

Pergunta: Tenho alguma alternativa, por exemplo, uma outra classe para tratamento de eventos ou tentar tratar esses eventos em um nível mais baixo?

:?: :?: :?: :?:

4 Respostas

Paulo_Silveira

faca a propria classe que tem o JList implementar o ActionListener
ou se quiser fazer mais bonito, crie uma clsse interna que implementa Actionlistener, ai ela vai ter acesso aos mebros nao estaticos da classe interna.

keller

cria um JPanel seu que tenha metodos setIndex() e getIndex()

piblic class MeuPanel
extends JPanel
{
private int num_index = 0;

  MeuPanel()
  {}

  public void setIndex(int index)
  {
     num_index = index;
  }
  public int getIndex()
  {
     return num_index;
  }
}

depois use algo do tipo…

MeuPanel queroSaber = (MeuPanel) getParent().getParent().getParent();
int index = queroSaber.getIndex();
System.out.println(index);

e no seu 1º Panel que ficam os 2ºs Panel’s
se usa o remove() do passando a posicao com o getIndex()

deu uma luz ? :idea:

N

gui, Acho que vc não entendeu.
[color=“darkblue”]Quando eu for chamar o método setIndex, ele terá que ser static, pois parte de um contexto static. A variável de instancia, num_index, também será static, é obrigatório, faz parte da sintaxe Java. Resumindo, quando eu tentar acessar um dos JPanels de minha lista ele sempre estará com o mesmo índice, para todos os JPanels.
Entendeu meu problema Agora?
:wink:[/color]

N

Esta é minha lista:

Quando eu clico em ADD é adicionado um JPanel (Classe que implementei) no fim da lista (recebendo o tal indice). Mas esse setIndex é static (é obrigatório) e a variável de instancia que recebe esse novo índice também é static. Ou seja, todos os JPanels terão o valor do índice respectivo a último JPanel criado. Sendo assim, se eu tentar clicar no X (deletar), de algum “item” do meio, ele só irá deletar o último JPanel dessa lista. :frowning: :? :snipersmile:

Criado 10 de outubro de 2004
Ultima resposta 12 de out. de 2004
Respostas 4
Participantes 3