Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    JCheckBox e il loro utilizzo

    Salve buona gente.... sto creando una piccola applicazione e mi sono trovato ad un punto morto!!!!
    Ho una Finestra con due JPanel... uno a NORTH e uno a CENTER. In quello a NORTH ho due
    codice:
    JCheckBox
    e scegliendo una o entrambe queste caselle di scelta vorrei che nel JPanel al CENTER venissero visualizzate una serie di altri JCheckBox che dipendono dal numero di scelte possibili all'interno di un ArrayList di vociListino...
    Mi sono spiegato male?
    Mi rispiego.... in un ArrayList di vociListino per un fantomatico programma di gestione parrucchiera ho tante voci listino divise per categoria (uomo e donna).
    Scegliendo nel JPanel a NORTH tra "uomo" e/o "donna" vorrei che nel JPanel CENTER venissero visualizzate tutte le vociListino inerenti a UOMO e/o DONNA che a sua volta devono essere dei JCheckBox per poter scegliere la voce che interessa in un ipotetico preventivo.

    Adesso vi chiedo... è una buona scelta quella che sto facendo o è meglio utilizzare un sistema diverso per poter selezionare tra tante voci di listino?

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    Mi rispiego.... in un ArrayList di vociListino per un fantomatico programma di gestione parrucchiera ho tante voci listino divise per categoria (uomo e donna).
    Scegliendo nel JPanel a NORTH tra "uomo" e/o "donna" vorrei che nel JPanel CENTER venissero visualizzate tutte le vociListino inerenti a UOMO e/o DONNA che a sua volta devono essere dei JCheckBox per poter scegliere la voce che interessa in un ipotetico preventivo.
    L'obiettivo mi è chiaro, c'è solo una cosa che non hai descritto: hai un unico ArrayList, giusto? Come differenzi i prodotti per uomo e per donna? Contiene oggetti di una tua classe es. Prodotto che contiene la indicazione (tramite boolean, enum, quello che vuoi) di uomo e/o donna?

    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    Adesso vi chiedo... è una buona scelta quella che sto facendo o è meglio utilizzare un sistema diverso per poter selezionare tra tante voci di listino?
    Io direi che va bene. Poi l'aspetto estetico è un altro discorso, cioè come disponi i due checkbox in NORTH e come visualizzi gli N checkbox in CENTER ... beh, ci sono diverse possibilità.

    Per i due checkbox in NORTH la prima cosa da fare, ovvia, è registrare un ActionListener per ricevere notifica che sono stati cliccati. Il listener può anche essere unico, non interessa molto distinguere l'evento in sé. Indipendentemente da quale dei due clicchi, devi comunque usare isSelected() per avere il flag di "selezionato" per entrambi. Con questi due flag true/false dovrai fare un "filtro" sulla tua lista per avere l'insieme dei prodotti da visualizzare.

    Come presentare l'elenco dei prodotti si può fare in diversi modi ma se (immagino ...) per ogni prodotto vuoi visualizzare un checkbox, una descrizione, magari il prezzo e magari altro (insomma un "record" di informazioni), la prima cosa che mi viene in mente è una tabella, ovvero JTable.

    Prova a valutare quanto ho detto, se hai altri dubbi, chiedi pure.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    sempre molto esauriente andbin... il problema (e anche unico) è che le voci del listino sono tante e non so come distribuirle in un JScollPane... ... .... però adesso, in base alle informazioni che mi hai dato suppongo che il JTable sia la pratica migliore (premetto che ancora non la conosco.. e mi metto subito a studiare)... In pratica metto i JCheckBox in un JTable e infine questo in un JScrollPane??.. spero di aver capito bene, nel frattempo mi metto a studiare il JTable..
    PS: per tutto il resto della mia domanda ho risolto (anche graficamente carino) e a breve metto in questa discussione il listato (adesso sarebbe incomprensibile... )
    e cmq GRAZIE e sempre GRAZIE

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    il problema (e anche unico) è che le voci del listino sono tante e non so come distribuirle in un JScollPane...
    In generale se si mette es. un JTextArea, JTable, JTree come "view" in JScrollPane e (solo quest'ultimo) lo si inserisce in un contenitore ... tutta la gestione dello scrolling è di fatto già automatica e "di serie".

    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    suppongo che il JTable sia la pratica migliore (premetto che ancora non la conosco.. e mi metto subito a studiare)...
    Per usare bene JTable devi avere ben chiari almeno i concetti sui table model. Per cose più particolari e avanzate, anche i concetti su cell-renderer/editor.

    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    In pratica metto i JCheckBox in un JTable
    Non c'è bisogno di "mettere" dei JCheckBox in JTable. È sufficiente che il table model "esponga" per una certa colonna il tipo (Class) Boolean.class affinché: a) compaia un checkbox in ogni cella della colonna e b) il tipo di oggetti trattati nella colonna siano appunto oggetti java.lang.Boolean.

    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    e cmq GRAZIE e sempre GRAZIE
    Prego! E buon anno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    di nuovo buon anno... ho dato una scorsa (ma proprio solo l'introduzione) di JTable... e non avrei mai pensato a quante cose si possono fare ... Una domanda...è perchè adotta il model-view-controller??? Se rispondete affermativamente mi si è aperto un mondo nuovo di Java... un po come quando a scacchi entri nell'ottica del gioco ( che non è solo muovere pedine)

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    perchè adotta il model-view-controller???
    Il framework Swing è basato e modellato sul pattern MVC ..... non solo JTable.

    Nota: per certi componenti non c'è il "model", ad esempio in JLabel che è banale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    In generale se si mette es. un JTextArea, JTable, JTree come "view" in JScrollPane e (solo quest'ultimo) lo si inserisce in un contenitore ... tutta la gestione dello scrolling è di fatto già automatica e "di serie"
    Ecco qui mi sorge un dubbio... io vorrei inserire un componente, come ad esempio un JTable in un JPanel e vorrei che la tabella scrollasse in quanto il JFrame che contiene il tutto è più piccolo della tabella stessa... forse faccio prima a spiegarmi con un esempio:
    codice:
    import javax.swing.*;
    import java.awt.*;
    public class Tabella1 extends JPanel
    {
        public Tabella1()
        {
            Object[][]cells = {{"0,0","0,1","0,2","0,3"},{"1,0","1,1","1,2","1,3"}};
            String[]columnNames = {"Colonna 1", "Colonna 2", "Colonna 3"};
            JTable table = new JTable(cells,columnNames);
            
            //perchè adesso lo scroll non scrolla????? ufff
            JScrollPane scroll = new JScrollPane(table);
            this.add(scroll);
        }
        
    }
    class TabellinaFrame extends JFrame
    {
        public TabellinaFrame()
        {
            this.setSize(200,200);
            Container contentPane = this.getContentPane();
            Tabella1 tab = new Tabella1();
            contentPane.add(tab);
        }
        public static void main(String[]args)
        {
            TabellinaFrame f = new TabellinaFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        }
    }
    ... tralasciamo la parte della tabella (lo so che non sto facendo un buon esempio) (ma è stato il primo approccio con JTable... dopo passo a studiare il suo Model).... adesso quello che mi preme è che la tabella si possa vedere per intero anche mettendo resizable(false)

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  8. #8
    Mi autorispondo.... guardando negli esempi di Oracle sull'utilizzo di JTable ho capito...
    codice:
    table.setPreferredScrollableViewportSize(new Dimension(200, 200));

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    codice:
    table.setPreferredScrollableViewportSize(new Dimension(200, 200));
    Questo di norma, sappilo, non serve. E tra l'altro non ti risolve tutto .... anzi.

    Il tuo codice di prima è tecnicamente corretto ma c'è una questione importante: il JScrollPane l'hai messo in un JPanel che di serie ha un FlowLayout che fa "fluire" i componenti dimensionandoli alla loro dimensione "preferita".

    Nel tuo caso capita che il preferred size di JScrollPane sia ben maggiore dei 200x200 che imponi sul frame, quindi la tabella risulta "troncata". Vuoi risolvere correttamente e meglio? Metti JScrollPane direttamente nel content-pane di JFrame oppure imposta un BorderLayout al tuo Tabella1.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Nel tuo caso capita che il preferred size di JScrollPane sia ben maggiore dei 200x200 che imponi sul frame, quindi la tabella risulta "troncata". Vuoi risolvere correttamente e meglio? Metti JScrollPane direttamente nel content-pane di JFrame oppure imposta un BorderLayout al tuo Tabella1.
    codice:
    import javax.swing.*;
    import java.awt.*;
    public class Tabella1 extends JPanel
    {
        public Tabella1()
        {
            Object[][]cells = {{"0,0","0,1","0,2","0,3"},{"1,0","1,1","1,2","1,3"}};
            String[]columnNames = {"Colonna 1", "Colonna 2", "Colonna 3"};
            JTable table = new JTable(cells,columnNames);
            
            this.setLayout(new BorderLayout());
            JScrollPane scroll = new JScrollPane(table);
            this.add(scroll,BorderLayout.CENTER);
        }
        
    }
    class TabellinaFrame extends JFrame
    {
        public TabellinaFrame()
        {
            this.setSize(400,400);
            Container contentPane = this.getContentPane();
            Tabella1 tab = new Tabella1();
            contentPane.add(tab);
        }
        public static void main(String[]args)
        {
            TabellinaFrame f = new TabellinaFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        }
    }
    Il problema che mi ponevo e che mi avevi già risolto in un precedente post, ma io non avevo interpretato bene, era che volevo che venissero messe le barre di scorrimento qualora la tabella fosse di maggiore altezza rispetto alla finestra che la conteneva... Ecco il problema era che non vedevo le barre di scorrimento ... beh.... mi è bastato aggiungere altre 3 righe alla tabella e... magicamente le barre c'erano... scusa per il tempo che t'ho fatto perdere...

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

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