aiuto in una remove GUI java

Pubblicità

franco7scala

Utente Attivo
Messaggi
40
Reazioni
0
Punteggio
26
ciao,
ho creato una lista concatenata che contiene un metodo remove
Codice:
public void remove(T x){
		ListIterator<T> it=new ListaConcatenata.ListItr();
		it.next();
		boolean trovato=false;
		if(testa.info==x){removeFirst();trovato=true;}
		else{
		    for(T e: this){
			    if(it.hasNext()){
				    if(it.next()==x)it.remove();trovato=true;
				}
		    }
		}
		if(!trovato)throw new NoSuchElementException();
	}
poi ho creato una classe gestore che utilizza la lista e questo metodi cosi:
Codice:
public void remove(Utente u){
    	lc.remove(u);
    }
dopo ho fatto un main che verificasse il funzionamento
Codice:
public static void main(String[]args){
    	 Gestore g = new Gestore();
    	 try{
 			g.carica();
 		} catch(IOException e){
 			try {
				g.salva();
			} catch (IOException e1){e1.printStackTrace();}
 		}
    	 Utente u1=new Utente("ROSSI","MARIO",123456);
    	 Utente u2=new Utente("ROSSI","PAOLO",134567);
    	 Utente u3=new Utente("MISSILE","CARMINE");
    	 Utente u4=new Utente("XXXXXX","XXXXXXX",00000000);
    	 g.add(u2);
    	 g.add(u1);
    	 g.add(u3);
    	 g.addLast(u4);
		 System.out.println(g.toString());
		 System.out.println("Rimuovo carmine");
		 g.remove(u3);
		 System.out.println(g.toString());
		 System.out.println(g.size());
		 g.clear();
		 System.out.println(g.toString());
		 g.add(u2);
    	 g.add(u1);
    	 g.add(u3);
    	 System.out.println(g.toString());
		 System.out.println("Salvo e carico");
    	 try {
			g.salva();
		} catch (IOException e){e.printStackTrace();}
		try {
			g.carica();
		} catch (IOException e) {e.printStackTrace();}
		System.out.println(g.toString());
		System.out.println("Fine");	

     }

e funziona alla perfezione.
alla fine ho creato un interfaccia grafica che utilizza questo metodo e qui vengono i problemi:

Codice:
private class FrameRemoveUtente extends JFrame implements ActionListener{
		private static final long serialVersionUID = 13200L;
		private JTextField cognome, nome;
		private JButton ok;
		public FrameRemoveUtente(){
			setTitle("Inserisci dati utente da eliminare");
			setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
			addWindowListener( new WindowAdapter(){public void windowClosing(WindowEvent e){
					                                   if(verificaUscita()){
					                                       gestore.remove(new Utente(LLGUI.this.cognome.toUpperCase(), LLGUI.nome.toUpperCase()));
					                                   }
					                                   cognome.setText("");
					                                   nome.setText("");
					                                   cognomeOk=false;
					                                   nomeOk=false;
					                                   FrameRemoveUtente.this.setVisible(false);
				                                   }
				                                  });
		    cognomeOk=false;
			nomeOk=false;
			JPanel p=new JPanel();
   	        p.add( new JLabel("Cognome", JLabel.RIGHT) );
   	        p.add( cognome=new JTextField("",12) );
      	    p.add( new JLabel("Nome", JLabel.RIGHT) );
   	        p.add( nome=new JTextField("",12) );  
   	        p.add( ok=new JButton("OK") );
   	        add(p);	 
   		    cognome.addActionListener(this);
   		    nome.addActionListener(this);
            ok.addActionListener(this);
			setLocation(250,340);
	    	setSize(400,150);
		}
		@SuppressWarnings("static-access")
		public void actionPerformed(ActionEvent e){
			if(e.getSource()==cognome){
	    		 LLGUI.this.cognome=cognome.getText();
	    		 LLGUI.this.cognomeOk=true;
	        }
	        if(e.getSource()==nome){
	    		 LLGUI.this.nome=nome.getText();  			 
	    	     LLGUI.this.nomeOk=true;
	        }
	    	else if(e.getSource()==ok){
	    		if(verificaUscita()){
	    			try{
	 				    gestore.remove(new Utente(LLGUI.this.cognome.toUpperCase(), LLGUI.nome.toUpperCase()));	
	    		        String del = new Utente(LLGUI.this.cognome.toUpperCase(), LLGUI.nome.toUpperCase()).toString() ;
	    		        area.setText(area.getText().replaceAll(del + "\n", ""));
	    			}catch(NoSuchElementException e1){
	    				JOptionPane.showMessageDialog(null,"Utente non trovato!");
	    			}
	 			    this.setVisible(false);	 			    
	 			    cognome.setText("");
	 			    nome.setText("");
	    		}
	 		}
		}
	}
questa è la classe del frame dell'oggetto che devo eliminare.
però non mi rimuove dalla lista l'oggetto !!!!


come devo fare ???? sto impazzendo!!!!:evil:


grazie
 
Non funziona poiché usi l'operatore di uguaglianza all'interno del metodo remove, che restituisce true solo se vengono confrontati due riferimenti al medesimo oggetto: infatti, quando chiami il metodo remove sul gestore:

Codice:
gestore.remove(new Utente(LLGUI.this.cognome.toUpperCase(), LLGUI.nome.toUpperCase()));

crei un nuovo Utente, probabilmente con gli attributi istanziati allo stesso valore di quello che vuoi eliminare, ma è in ogni caso un oggetto diverso da quello che vuoi rimuovere.

Per risolvere il problema dovresti sostituire i controlli di uguaglianza con chiamate al metodo equals, come

Codice:
testa.info.equals(x)

al posto di

Codice:
testa.info==x

Perché tutto funzioni, però, devi fare l'override del metodo equals nella classe Utente, per definire il tuo concetto di uguaglianza tra due oggetti di questo tipo; ad esempio, se consideri uguali due oggetti con lo stesso nome e cognome, l'implementazione del metodo equals sarà:

Codice:
public boolean equals(Object o) {
  if(!o instanceof Utente)
    return false;
  Utente u = (Utente) o;
  return this.nome.equals(u.nome) && this.cognome.equals(u.cognome);
}

Occhio alla firma del metodo, non modificarla :)
 
Pubblicità
Pubblicità
Indietro
Top