Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Per quanto posso capire (ovviamente non conoscendo tutto il tuo contesto di lavoro), per ogni menuId che prendi da menuLista.get(i), allora dovresti avere:

    - un nuovo List<Product> (lo ottieni, deduco, da DBManager.fillProductList).
    - un nuovo XyzListModel (non so cosa hai usato di preciso) che ovviamente riempi con gli N Product.
    - un nuovo JList (questo concetto di "nuovo" del JList non lo vedo nel tuo codice!)
    - un nuovo JScrollPane (questo sì, lo fai già, da quanto vedo).
    - un nuovo tab (questo giustamente lo fai con jTabbedPane1.addTab).

    Ti è chiaro che dovresti avere tutti oggetti "nuovi" e ben distinti tra i vari tab?
    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
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Per quanto posso capire (ovviamente non conoscendo tutto il tuo contesto di lavoro), per ogni menuId che prendi da menuLista.get(i), allora dovresti avere:

    - un nuovo List<Product> (lo ottieni, deduco, da DBManager.fillProductList).



    - un nuovo XyzListModel (non so cosa hai usato di preciso) che ovviamente riempi con gli N Product.
    ho usato DefaultListModel
    quindi ci vuole un diverso DefaultListModel per ogni jlist?

    - un nuovo JList (questo concetto di "nuovo" del JList non lo vedo nel tuo codice!)
    ok, infatti non c'e', è un'unica jlist
    posso creare un arraylist di jlist? cioè come dovrei fare per creare una nuova jlist?


    Edit: ok ho risolto così:

    codice:
    for (int i = 0; i < menuLista.size(); i++) {
                int menuId = menuLista.get(i).getMenuId();
                DefaultListModel modelProductList = new DefaultListModel();
                JList jProductList = new JList(modelProductList);
                // estraggo dal DB la lista di prodotti appartenenti al menu passatogli come parametro
                // con il ciclo for inserisco nel modello di default della JList prodotti
                //prodottiLista.clear();
                modelProductList.clear(); // ricarico la lista dei prodotti.
                prodottiLista = DBManager.fillProductList(menuId);
                for (int b = 0; b < prodottiLista.size(); b++) {
                    modelProductList.addElement((Product) prodottiLista.get(b));
                }
                JScrollPane scrollPane = new JScrollPane(jProductList);
                jTabbedPane1.addTab(menuLista.get(i).getMenuName(), scrollPane);
                jProductList.addListSelectionListener(new ListSelectionListener() {
                    @Override
                    public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                        jProductListValueChanged(evt);
                    }
                });
                jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                jProductList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            }
    Mi stavo complicando la vita inutilmente...non serviva nessun array!

    Grazie!
    Ultima modifica di Jamie04; 23-05-2014 a 15:53

  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 usato DefaultListModel
    quindi ci vuole un diverso DefaultListModel per ogni jlist?

    ok, infatti non c'e', è un'unica jlist
    posso creare un arraylist di jlist? cioè come dovrei fare per creare una nuova jlist?
    Devi avere tutto separato. Vuoi creare un arraylist di jlist? Certo che si può fare ma .... poi ti serve successivamente andare a prendere il JList i-esimo? (stessa cosa che ti dicevo nell'altra discussione).

    Se ti basta solo agganciare ogni cosa al proprio "contenitore" (listmodel nel list, il list nel scrollpane, il scrollpane nel tab), no non ti serve un arraylist.

    Grosso modo (abbozzato .... vedi il concetto, non tanto il codice!):

    codice:
    for (int i = 0; i < menuLista.size(); i++) {
        int menuId = .........
    
        // *nuova* lista Product
        List<Product> prodottiLista = DBManager.fillProductList(menuId);
    
        // *nuovo* list model
        DefaultListModel listModel = new DefaultListModel();
    
        // ....itera su prodottiLista e riempi listModel .....
    
        // *nuovo* JList
        JList jlist = new JList(listModel);
    
        // *nuovo* JScrollPane
        JScrollPane scrollPane = new JScrollPane(jlist);
    
        // aggiunge *nuovo* tab
        jTabbedPane1.addTab( ..... , scrollPane);
    
        // ......
    }
    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
    Ok, vero! Ho un piccolo "problemino" se clicco su un prodotto questo viene aggiunto correttamente alla jtable laterale però la prima riga resta sempre vuota. Questo è il codice che genera la jtable in questione:

    codice:
            jTable1 = new JTable();
            jTable1.setModel(new DefaultTableModel(
                    new Object[][]{{},},
                    new String[]{"Prodotto", "Prezzo", "Quantità"}
            ) {
                Class[] types = new Class[]{
                    java.lang.String.class, java.lang.Float.class, java.lang.Integer.class,  
                };
    
                @Override
                public Class getColumnClass(int columnIndex) {
                    return types[columnIndex];
                }
            });
            jTable1.setRequestFocusEnabled(false);
            jTable1.setSelectionBackground(new Color(255, 204, 204));
            jTable1.setSelectionForeground(new Color(51, 51, 51));

    e questo è il codice che gestisce il click sulla lista prodotti che aggiunge la riga alla jtable:

    codice:
        private void jProductListValueChanged(ListSelectionEvent evt) {
            if (evt.getValueIsAdjusting()) {
                return;
            }
            JList jProductList = (JList) evt.getSource();
            int index = jProductList.getSelectedIndex();
            if (index >= 0) {
                Product selectedProduct = (Product) jProductList.getSelectedValue();
                int currentProduct = selectedProduct.getProductId();
                productName = selectedProduct.getProductName(); // da inserire nella jTable
                productPrice = selectedProduct.getProductPrice(); // da inserire nella jTable
                ((DefaultTableModel) jTable1.getModel()).addRow(new Object[]{productName, productPrice, 1});
            }
        }
    Ultima modifica di Jamie04; 23-05-2014 a 16:22

  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
    jTable1.setModel(new DefaultTableModel(
    new Object[][]{{},},
    In new Object[][]{{},} quel {} interno è effettivamente una riga "vuota".

    Consiglio: new Object[0][]

    (senza alcun { ..... } di inizializzazione)


    P.S. attualmente hai bisogno di fare così:
    ((DefaultTableModel) jTable1.getModel()).addRow(new Object[]{productName, productPrice, 1});

    perché secondo me non hai "incapsulato" bene come si deve le varie parti della interfaccia utente.
    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
    In new Object[][]{{},} quel {} interno è effettivamente una riga "vuota".

    Consiglio: new Object[0][]

    (senza alcun { ..... } di inizializzazione)
    Ok Ne sai una più del diavolo


    P.S. attualmente hai bisogno di fare così:
    ((DefaultTableModel) jTable1.getModel()).addRow(new Object[]{productName, productPrice, 1});
    perché secondo me non hai "incapsulato" bene come si deve le varie parti della interfaccia utente.
    Come ti dicevo questa classe non è la mia, sto soltanto aiutando la mia collega a finirla in tempo, quindi non so nemmeno bene come abbia "ragionato". Calcola che è stata fatta molto di fretta, purtroppo come dicevo questa parte non era nemmeno di nostra competenza!
    Ma puoi spiegarti meglio? Come andava fatto?

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.