Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [java]help...jList

  1. #1
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491

    [java]help...jList

    Creo una jList, poi con un bottone voglio levarle degli elementi, ho scritto il codice:
    codice:
      DefaultListModel m = (DefaultListModel) myJList.getModel();
      m.removeElementAt(myJList.getSelectedIndex());
    L'elemento viene levato, la jList si aggiorna e scompare la riga selezionata...solo che se vado ad leggere (facciamo finta che ad ogni posizione della jList sia associato un numero in un Array) uno dei dati rimanenti la jList mi restituisce l'indice come se ci fosse ancora l'elemento levato prima.
    Esempio:
    La mia jList è composta dalla tabellina del 2:
    2*1
    2*2
    2*3
    2*4
    ...
    Se clicco sulla terza riga mi restituisce ad esempio 6.
    Poi ho un bottone con cui cancello le righe (ad esempio la terza).
    Se poi vado a cliccare 2*4 (che ora a preso posizione alla terza riga) mi restituisce sempre 6!!
    Come se la jList non avesse scalato tutti gli indici quando un elemento è stato rimosso.....

    Perfavore HELP ME...

    Ciao
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  2. #2
    :master:
    non fai prima a rimuoverle dall'array? credo che removeElementAt() ti cancelli solo la visualizzazione, ma l'elemento, nel modello resta ancora!
    Blink@go

    "Non tutto quel che è oro brilla, Ne gli erranti sono perduti; Il vecchio ch'è forte non s'aggrinza, Le radici profonde non gelano.Dalle ceneri rinascerà un fuoco, L'ombra sprigionerà una scintilla, Nuova sarà la lama ormai rotta, E re quei ch'è senza corona."

    ------------
    Lang: java 1.4.1 Eclipse

  3. #3
    Originariamente inviato da blinkago
    :master:
    non fai prima a rimuoverle dall'array? credo che removeElementAt() ti cancelli solo la visualizzazione, ma l'elemento, nel modello resta ancora!
    No. Per come è implementato
    codice:
    DefaultListModel
    i metodi
    codice:
    remove
    e
    codice:
    removeElementAt
    rimuovono l'elemento dal modello.
    - "Boy, the food at this place is really terrible."
    - "Yeah, I know, and such ... small portions."

  4. #4
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Quindi secondo te ci deve essere un problema da qualche altra parte nel codice?
    Eppure non credo, ho messo una riga per visualizzare l'indice selezionato e l'errore è proprio lì; il jList.getSelectedIndex() dopo che ho cancellato una riga e quando ne seleziono un'altra mi restituisce il valore come le il vecchio elemento fosse ancora lì!
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  5. #5
    Vuoi dire che ti restituisce l'indice dell'elemento che hai appena tolto?

    Puoi esporre come vorresti che funzionasse?
    - "Boy, the food at this place is really terrible."
    - "Yeah, I know, and such ... small portions."

  6. #6
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Allora questa è una parte di un client del server pop3. Ho un array di messaggi mess[] visualizzati in una jList.Ci sono tanti bottoni (apri,rispondi,nuovo....) tra i quali anche "cancella" per cancellare il messaggio(dal server e dalla jList) il metodo che chiama il bottone è:

    codice:
     
    Message mess[]; //è ricevuto dal server
    Jlist arrivi;
    
    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
    //Cancellare mail selezionata
      try{
       mess[arrivi.getSelectedIndex()].setFlag(Flags.Flag.DELETED, true);
       DefaultListModel m = (DefaultListModel) arrivi.getModel();
       int index = arrivi.getSelectedIndex();
       m.removeElementAt(index);
       status.setText("Numero di Mail presenti:" +m.getSize());
       }
     catch(Exception e){....}
    }
    Allora dopo aver cancellato, il numero di mail presenti si aggiorna in modo giusto; quando seleziono un'altra mail dalla jList e clikko "apri" in realtà avviene questo:
    -Se la mail selezionata si trova prima di quella cancellata allora si apre tutto ok
    -Se invece si trovava dopo viene aperta la mail sbagliata,in particolare quella precedente,
    -Se la mail che voglio aprire è quella che prima stava dopo quella cancellata (ma che ora ha preso il suo posto) mi si apre quella cancellata!!

    Il metodo chiamato dal bottone "apri" è:

    codice:
    MailReader è JFrame per lettura messaggi.
    
    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
    // E'stata selezionata una e-mail bisogna visualizzarne il contenuto
      int selected = arrivi.getSelectedIndex();                          
      MailReader leggi = new MailReader(mess[selected]); 
      leggi.show();
        }
    Boh? Ti pare che uno che sta scrivendo un programma client per la ricezione di e-mail si deve bloccare davanti ad una stupida jList!



    Grazie
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  7. #7
    Hai fatto l'errore che mi aspettavo: rimuovi l'elemento dal modello della lista ma non lo rimuovi dall'array "mess".
    - "Boy, the food at this place is really terrible."
    - "Yeah, I know, and such ... small portions."

  8. #8
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Mmmmm hai ragione, effettivamente la jList mi ritorna il valore giusto, ma nell'array mess[] a questo corrisponde il messaggio sbagliato....:quote: Che deficiente che sono :quote:
    Ma si può fare un'errore del genere?
    C'ho perso pure un pomeriggio:quote: :gren:

    Vabbè grazie mille Ciao
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  9. #9
    Originariamente inviato da ME
    :master:
    non fai prima a rimuoverle dall'array?
    Quello che dicevo io!
    Blink@go

    "Non tutto quel che è oro brilla, Ne gli erranti sono perduti; Il vecchio ch'è forte non s'aggrinza, Le radici profonde non gelano.Dalle ceneri rinascerà un fuoco, L'ombra sprigionerà una scintilla, Nuova sarà la lama ormai rotta, E re quei ch'è senza corona."

    ------------
    Lang: java 1.4.1 Eclipse

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.