Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    codice:
    DepositoPrincipale.aggiungi(articolo);
    JlistModel.addElement(articolo);
    Però nella JList non si visualizzano ordinati.
    Mi pare ovvio ... stai aggiungendo in DepositoPrincipale che è ordinato grazie al TreeSet ma lo stesso articolo lo stai aggiungendo separatamente anche nel list model. Dove non c'è di per sé alcun ordinamento implicito sui contenuti degli oggetti.

    O metti tutto nel TreeSet e poi vai a creare un ArrayList popolato dal TreeSet (quindi i dati sono già ordinati) e poi metti gli elementi del ArrayList nel list model.
    Oppure implementi un tuo ListModel che ha la logica per mantenere ordinati gli elementi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    O metti tutto nel TreeSet e poi vai a creare un ArrayList popolato dal TreeSet (quindi i dati sono già ordinati) e poi metti gli elementi del ArrayList nel list model.
    Oppure implementi un tuo ListModel che ha la logica per mantenere ordinati gli elementi.
    Sarebbe più semplice , ma non posso riempire prima tutto il TreeSet e poi metteril tutto in ListModel.
    Ho bisogno che gli articoli che aggiungo si mantengano ordinati "in tempo reale" cioè ogni volta che aggiungo un oggetto articolo la JList si deve aggiornare.

    Implementando una mia classe ListModel posso arrivare a questo?

    Devo creare una mia classe ListModel che estende DefaultListModel e ci devo mettere un metodo comparatore giusto?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Implementando una mia classe ListModel posso arrivare a questo?
    Sì, implementando un tuo list model, si può fare.

    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Devo creare una mia classe ListModel che estende DefaultListModel e ci devo mettere un metodo comparatore giusto?
    No. Crei una classe che estende AbstractListModel. All'interno crei/gestisci il tuo list (basta ArrayList) e implementi i 2 metodi basilari per ListModel che sono getSize e getElementAt.

    Poi definisci un tuo metodo extra, puoi chiamarlo, add, insert ... come vuoi che riceve l'elemento da inserire. In questo metodo devi inserire l'elemento all'indice "giusto" per mantenere ordinata la lista. Ti conviene usare il principio del "binary search" (vedi i metodi di utilità binarySearch di Collections).
    Dopo che hai inserito l'elemento all'indice giusto nel tuo list, devi chiaramente notificare la "view" usando fireIntervalAdded fornito da AbstractListModel.

    P.S. non ti conviene partire da DefaultListModel perché ha una API ben più corposa e diversi metodi che alterano il model. Potresti ridefinire addElement(E element) ma ..... add(int index, E element) ? O insertElementAt(E element, int index) ? Questi appunto non sono pensati per un list model mantenuto ordinato.

    EDIT: tra l'altro in DefaultListModel la variabile di istanza che tiene il Vector degli elementi è private. E non c'è un metodo che lo espone direttamente (c'è al massimo il toArray()). Quindi applicare il principio del binary search non sarebbe così banale. I binarySearch di Collections non sarebbero usabili (non hai accesso al Vector) e quindi dovresti implementarlo "a mano", scrivendo più codice (e dovresti conoscere molto bene il binary search).
    Ultima modifica di andbin; 17-03-2014 a 18:37
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    mi è venuta un'altra idea.....

    e se mettessi il treeset come unico elemento della Jlist ?

    Cioè aggiungo un elemento nella treeset ,
    Poi aggiungo la treeset in JlistModel;
    Alle successive aggiunte di articoli , ripeto il passo 1 e poi sostituisco l'elemento di JlistModel con la nuova treeset .
    In pratica nel JlistModel rimane sempre un solo elemento costituito dalla treeset.

    L'unico problema e che non riesco a visualizzare gli elementi di treeset nella JList.

    Mi esce una cosa del tipo : [Deposito.DepositoArticoli@480a3d98f]

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    e se mettessi il treeset come unico elemento della Jlist ?

    Cioè aggiungo un elemento nella treeset ,
    Poi aggiungo la treeset in JlistModel;

    Alle successive aggiunte di articoli , ripeto il passo 1 e poi sostituisco l'elemento di JlistModel con la nuova treeset .
    In pratica nel JlistModel rimane sempre un solo elemento costituito dalla treeset.

    L'unico problema e che non riesco a visualizzare gli elementi di treeset nella JList.
    No, non può funzionare così (e non ha neanche senso).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Mi è stato suggerito di utilizzare una JTable , che dici? ; dovrebbe mantenere ordinati gli elementi da se mi pare. Posso associare ad essa una TreeSet o ha già di per se una struttura dati?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Mi è stato suggerito di utilizzare una JTable , che dici?
    Se ti è necessario visualizzare più dati incolonnati per ciascun "record", sì è appropriato.

    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    dovrebbe mantenere ordinati gli elementi da se mi pare. Posso associare ad essa una TreeSet o ha già di per se una struttura dati?
    JTable di per sé non ha alcun ordinamento "predefinito". JTable si basa sui "table model" che semplicemente espongono i dati e le informazioni su di essi.

    I Set/Map non sono appropriati, non direttamente. Un table model può essere uno predefinito del framework (es. DefaultTableModel) oppure uno completamente custom. Ma in genere se ha una struttura dati interna, si basa su array o List.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.