Visualizzazione dei risultati da 1 a 9 su 9

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    E' possibile linkare due jlist?

    Ciao, sto impazzendo su come gestire al meglio questa cosa ma finora ho elaborato soluzioni che pur se funzionano sono molto "deboli" infatti non appena succede qualcosa di diverso ecco che spunta fuori un problema.
    Quello che devo fare non è niente di trascendente, però...
    Io ho due jlist entrambe che prendono i dati da un vector riempito con dati presi da un db mysql.
    Nella jlist principale deve esserci la categoria da selezionare, in base a cosa si seleziona nella categoria devono comparire gli articoli che sono in quella categoria nella seconda jlist. E fin qui avrei anche fatto.
    Il problema è che non devo solo visualizzare i dati ma anche farci delle operazioni di inserimento e modifica dati e qui sorgono i problemi.
    1) Per esempio se modifico il nome di una categoria sono costretta a ricaricare la jlist delle categorie ma in questo modo se voglio continuare ad esempio ad aggiungere articoli in quella categoria ho il solito NPE perché ho ovviamente perso la selezione. Potrei salvarmi l'indice della categoria selezionata prima della modifica e passarlo al metodo che inserisce il prodotto ma anche questa soluzione non va bene perché l'inserimento del prodotto si fa anche su una nuova categoria e su una categoria già esistente e perciò in quelle situazioni finirei col passargli l'indice sbagliato, certo potrei mettere una serie di if e cercare di capire se l'inserimento del prodotto si sta facendo su una categoria modificata, esistente o nuova...ma già così ce ne sono troppi e ho paura che diventi troppo incasinata la faccenda!
    2) Ho un pulsante di ricerca articoli che se trova un match con la ricerca me lo mostra nella jlist degli articoli ma io vorrei anche che oltre a mostrarmi l'articolo trovato mi punti l'indice della jlist della categoria a quella cui appartiene e questo secondo punto non so farlo.
    In pratica io vorrei che ci fosse una sorta di collegamento fra le due jlist, in modo che menuList (categorie) "sappia" cosa sta "facendo" productList (articoli).... non so se mi sono spiegata...
    Mi è stato suggerito di aggiungere un ListSelectionListener a menuList e fare in modo che il gestore imposti il model di productList per visualizzare i dettagli della riga selezionata...ma sinceramente non ho ben capito come implementare questa cosa!

    Sono disponibile anche a cambiare implementazione se le jlist fossero scomode per fare queste cose... cioè alla fine non è che devo fare chissà che, è soltanto una form di inserimento e modifica di pochi dati in un db...l'unica "difficoltà" è questa suddivisione in categorie che mi porta molti problemi e il fatto che ho voluto fare una form molto intuitiva per l'utente (e di solito facile per l'utente significa difficile per il povero programmatore )
    Avete qualche suggerimento da darmi?
    Grazie tante!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ho visto che in netbeans c'è una funzione di Binding, qualcuno mi può spiegare a grandi linee come funziona e se può fare al caso mio?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ho visto che in netbeans c'è una funzione di Binding, qualcuno mi può spiegare a grandi linee come funziona e se può fare al caso mio?
    Non uso normalmente NetBeans quindi non so dire ora in questo momento cosa è quella "funzione di Binding". Mi verrebbe da pensare che è una funzionalità che permette di agganciare i componenti grafici ad una base dati ma questo vorrebbe dire che ci deve essere un framework (offerto da NetBeans) per questo o comunque la generazione di un po' di codice opportuno per quella gestione.

    Non ho risposto prima alla tua domanda perché il mio problema principale quando rispondo sui forum non è tanto dare la risposta in sé spiegando e descrivendo le questioni tecniche (perché credo di intendermene abbastanza ) ma capire bene il contesto e quello che vuole fare l'utente ... (che è più difficile )

    Vediamo di riassumere. Quando parli di "linkare due jlist" a me viene da pensare questo (esempio pratico per capirci):
    quando selezioni il valore X della jlist1, devono comparire i valori es. A B C nella jlist2 (che sono legati al valore X), quando selezioni il valore Y della jlist1, devono comparire i valori es. D E F nella jlist2 (che sono legati al valore Y).
    Detto in generale, una gestione in "cascata" delle JList, dove i valori della seconda dipendono dalla selezione nella prima. È così?
    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
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non uso normalmente NetBeans quindi non so dire ora in questo momento cosa è quella "funzione di Binding". Mi verrebbe da pensare che è una funzionalità che permette di agganciare i componenti grafici ad una base dati ma questo vorrebbe dire che ci deve essere un framework (offerto da NetBeans) per questo o comunque la generazione di un po' di codice opportuno per quella gestione.
    Non so se debba esserci un framework (ma a me sembra di no), di sicuro genera un po' di codice.
    Credo che non serva solo ad agganciare i componenti grafici a una base di dati, ma in generale a "legare" vari componenti evitando di dover scrivere un sacco di listener e gestori di azioni. Questo è quello che ho capito a grandi linee. Ho fatto una prova veloce con una jlist e un campo di testo, ho legato il campo di testo alla jlist con la binding expression ${selectedElement}, così facendo quando clicco su un elemento della jlist mi mostra nel jtextfield l'elemento selezionato (roba per la quale io ho sprecato fiumi di codice ). Ovviamente non so come funzioni se deve estrarre più di un dato.

    Non ho risposto prima alla tua domanda perché il mio problema principale quando rispondo sui forum non è tanto dare la risposta in sé spiegando e descrivendo le questioni tecniche (perché credo di intendermene abbastanza ) ma capire bene il contesto e quello che vuole fare l'utente ... (che è più difficile )
    Hai ragione, ma non ti preoccupare proprio, già è troppo quello che fai visto che nessuno ti paga per farlo!

    Vediamo di riassumere. Quando parli di "linkare due jlist" a me viene da pensare questo (esempio pratico per capirci):
    quando selezioni il valore X della jlist1, devono comparire i valori es. A B C nella jlist2 (che sono legati al valore X), quando selezioni il valore Y della jlist1, devono comparire i valori es. D E F nella jlist2 (che sono legati al valore Y).
    Detto in generale, una gestione in "cascata" delle JList, dove i valori della seconda dipendono dalla selezione nella prima. È così?
    Esattamente questo.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ho fatto una prova veloce con una jlist e un campo di testo, ho legato il campo di testo alla jlist con la binding expression ${selectedElement}, così facendo quando clicco su un elemento della jlist mi mostra nel jtextfield l'elemento selezionato (roba per la quale io ho sprecato fiumi di codice ).
    Ho fatto una ricerca veloce ed ho trovato subito questo. Da quanto ho capito è l'utilizzo della specifica JSR-295 "Beans Binding". Tra l'altro non ho trovato (ma non ho cercato più di tanto comunque) un documento ufficiale sulla specifica, quindi mi viene da pensare che sia qualcosa di non più tanto portato avanti e/o obsoleto.
    In ogni caso, se si utilizza una implementazione di questa specifica, non è certo presente nel framework standard di Java SE ... devi comunque sicuramente portarti dietro qualcosa insieme all'applicazione.

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Esattamente questo.
    Supponendo selezione "singola" (giusto come caso più semplice), il punto fondamentale è la registrazione di un ListSelectionListener. Quando la selezione nella lista1 cambia, prendi il valore selezionato e lo usi in qualche modo per ottenere i dati da mettere nella lista2.
    Il punto critico è come/dove vengono presi i dati per la lista2. Se fossero semplici strutture dati (es. ad ogni elemento della lista1 è associato un array/List con altri dati), sarebbe relativamente semplice "legare" le due liste, eventualmente facendo un po' di "design" sulle classi in modo che sia, magari, abbastanza facilmente riutilizzabile.
    Se si trattasse di accedere ad un DB per prendere i dati, bisognerebbe fare altre valutazioni. Es. come viene usato il valore selezionato? Fa solo da "filtro" in una query ben precisa? O addirittura va a cambiare radicalmente la query?
    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
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ho fatto una ricerca veloce ed ho trovato subito questo. Da quanto ho capito è l'utilizzo della specifica JSR-295 "Beans Binding". Tra l'altro non ho trovato (ma non ho cercato più di tanto comunque) un documento ufficiale sulla specifica, quindi mi viene da pensare che sia qualcosa di non più tanto portato avanti e/o obsoleto.
    Sì è lo stesso link che stavo leggendo io, ho fatto anche delle prove, ma direi che è meglio scartarlo, anche perché genera un mucchio di codice che non comprendo e mi sembra pure pesantino, ci mette più tempo a caricare la form dove sono abilitate quelle cose.


    Quote Originariamente inviata da andbin Visualizza il messaggio
    Supponendo selezione "singola" (giusto come caso più semplice), il punto fondamentale è la registrazione di un ListSelectionListener. Quando la selezione nella lista1 cambia, prendi il valore selezionato e lo usi in qualche modo per ottenere i dati da mettere nella lista2.
    Il punto critico è come/dove vengono presi i dati per la lista2. Se fossero semplici strutture dati (es. ad ogni elemento della lista1 è associato un array/List con altri dati), sarebbe relativamente semplice "legare" le due liste, eventualmente facendo un po' di "design" sulle classi in modo che sia, magari, abbastanza facilmente riutilizzabile.
    Se si trattasse di accedere ad un DB per prendere i dati, bisognerebbe fare altre valutazioni. Es. come viene usato il valore selezionato? Fa solo da "filtro" in una query ben precisa? O addirittura va a cambiare radicalmente la query?
    La selezione è singola. Guarda ti metto uno screenshot di come è la maschera attualmente che forse vale più di mille parole:
    Untitled-1.jpg
    La jlist a sx è quella delle categorie. Se clicco su una categoria (selezione singola) nella jlist di dx mi compaiono i prodotti di quella categoria.
    I dati nella lista2 (quella dei prodotti) vengono presi da un vector che viene generato a seconda dell'id del menu selezionato nella lista1, quindi ho un metodo che mi ritorna questo vettore a seconda dell'id della categoria che gli passo.
    I dati sono in un db mysql.
    Tanto per chiarire meglio questo è il metodo che chiamo per riempire la jlist2:

    codice:
        private void reloadProductList() {
            modelProductList.clear();
            if (newMenuIsSaved) {
                Vector<Product> productVoices = DBConnection.fillProductList(newMenuId);
                for (int i = 0; i < productVoices.size(); i++) {
                    modelProductList.addElement((Product) productVoices.get(i));
                }
            } else {
                Vector<Product> productVoices = DBConnection.fillProductList(selectedMenuId);
                for (int i = 0; i < productVoices.size(); i++) {
                    modelProductList.addElement((Product) productVoices.get(i));
                }
    
            }
        }
    Non ho capito questa tua domanda:
    "Es. come viene usato il valore selezionato? Fa solo da "filtro" in una query ben precisa? O addirittura va a cambiare radicalmente la query"

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Avrei più o meno risolto il problema 1) (quello dell'NPE in caso di modifica della categoria), semplicemente usando una variabile globale (listIndex) dove "appoggio" l'indice dell'elemento selezionato prima di perdere la selezione, e poi lo ri-fisso dopo il ri-caricamento della lista con:
    menuList.setSelectedIndex(listIndex);
    Ovviamente non va bene in caso voglio modificare un nuovo menu appena dopo averlo inserito, ma tanto è una possibilità che ho tolto, vista la rarità dell'evento.

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.