Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213

    [JAVA] Aggiornare la GUI

    Tento di spiegarvi la situazione per aiutarmi bene

    Io ho un Frame principale con tre JPanel (UP, MID e BOT). In quello MID ho una lista con ogni riga del tipo: NOME PREZZO + QUANTITA - . Alla pressione dei tasti più o meno parte una classe per aggiungere o diminuire la quantità. Funziona tutto, mi è rimasto solo un problema che la quantità non aumenta, o meglio la grafica non si aggiorna, perchè se per esempio torno indietro nel menù principale e poi riapro la lista, la quantità è aggiornata correttamente. Come potrei risolvere questo problema?

    Sto provando di tutto ma non riesco proprio...

  2. #2
    posta almeno un pò di codice, basta anche solo la costruzione è l'aggiunta della lista e l'action che si verifica alla pressione del tasto + o -

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Vabbene. Questa è la parte di codice interessata alla costruzione della lista e dov'è invocata la classe per azionare l'evento per aggiungere il prodotto:

    codice:
    	private void getProduct() {
    		DataBase connessione = new DataBase();
    		Statement statement = connessione.getCmd();
    		//Query per recuperare un certo tipo di prodotto
    		String qry = "SELECT * FROM PRODOTTO WHERE TIPO='" + this.getTitleSection() + "' ORDER BY NOME ASC";
    		ResultSet res;
    		try {
    			int indiceRiga = 1;
    			res = statement.executeQuery(qry);
    			int contaElementi = 0;
    			while(res.next()) {
    				contaElementi++;
    				if(contaElementi >= (ConDimension.NUM_PRODUCT_PAGE*this.getPagina()+1) && contaElementi <= (ConDimension.NUM_PRODUCT_PAGE*this.getPagina()+ConDimension.NUM_PRODUCT_PAGE)) {
    					JLabel testo1 = new JLabel(res.getString("Nome"));
    					GridBagConstraints gbc2 = new GridBagConstraints();
    					gbc2.gridy = indiceRiga;
    					gbc2.gridx = 1;
    					midListMenuPanel.add(testo1,  gbc2);
    					JLabel testo2 = new JLabel(res.getString("Prezzo") + " €");
    					gbc2.gridx = 2;
    					midListMenuPanel.add(testo2, gbc2);
    					
    					JButton addProduct = new JButton("+");
    					gbc2.gridx = 5;
    					midListMenuPanel.add(addProduct, gbc2);
    					addProduct.addActionListener(new AddProduct(res.getInt("ID_PRODOTTO"), res.getDouble("PREZZO")));
    					
    					JLabel q = new JLabel("" + ShoppingCart.showQuantita(res.getInt("ID_PRODOTTO")));
    					gbc2.gridx = 4;
    					midListMenuPanel.add(q, gbc2);
    					
    					JButton minProduct = new JButton("-");
    					gbc2.gridx = 3;
    					midListMenuPanel.add(minProduct, gbc2);
    					minProduct.addActionListener(new MinProduct(res.getInt("ID_PRODOTTO"), res.getDouble("PREZZO")));
    					
    					indiceRiga += 1;
    				}
    			}
    			res.close();
    			statement.close();
    			connessione.closeConnectionToDB();
    		} catch (SQLException e) {
    			e.printStackTrace();
    			return;
    		}
    	}
    Questa è la classe che aggiunge:

    codice:
    public class AddProduct implements ActionListener{
    	
    	private int id;
    	private double prezzo;
    	
    	public AddProduct(int id, double p) {
    		setId(id);
    		setPrezzo(p);
    	}
    	
    	private void setId(int id) {
    		this.id = id;
    	}
    	
    	private int getId() {
    		return id;
    	}
    	
    	private void setPrezzo (double p) {
    		prezzo = p;
    	}
    
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		addProduct();
    	}
    	
    	/**
    	 * Metodo per aggiungere un prodotto all'ordinazione.
    	 */
    	public void addProduct() {
    		int ind = ShoppingCart.idProduct.indexOf(getId());
    		if(ind == -1) {
    			ShoppingCart.idProduct.add(getId());
    			ShoppingCart.quantita.add(1);
    		} else {
    			int elem = ShoppingCart.quantita.get(ind);
    			elem++;
    			ShoppingCart.quantita.setElementAt(elem, ind);
    		}
    		Service.getService().setConto(prezzo);
    	}
    }

  4. #4
    E bè se nell'action listener non aggiorni la tua label
    JLabel q =newJLabel(""+ShoppingCart.showQuantita(res.getInt("ID_PRODOTTO")));

    CHi vuoi che la aggiorni per te ?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Certamente, io questo voglio capire...Come posso fare? Purtroppo al momento non ci sono arrivato ancora, se tu avessi qualche suggerimento o proprio la soluzione saresti più d'aiuto e te ne sarei grato

  6. #6
    Bè abbastanza semplice dichiara una proprietà JLabel nell'actionListener (AddAction) e nel costruttore di quest'ultimo passagli anche il riferimento della label q a quel punto puoi aggiornala in base alla nuova quantità

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Ti ringrazio. Potresti essere più preciso per proprietà JLabel nell'actionListener (AddAction)? Non mi è stata molto chiara come cosa, magari con un esempio pratico o dove possa leggere qualcosa...

  8. #8
    A voi giovani bisogna sempre imboccarvi..... ehehehhe
    codice:
    ---
    addProduct.addActionListener(new AddProduct(res.getInt("ID_PRODOTTO"), res.getDouble("PREZZO"),q));
    ---
    
    
    
    
    public class AddProduct implements ActionListener{
        
        private int id;
        private double prezzo;
        private JLabel lblQuantita;
    
    
        public AddProduct(int id, double p,JLabel lblQuantita) {
            setId(id);
            setPrezzo(p);
            this.lblQuantita = lblQuantita;
        }
        
        private void setId(int id) {
            this.id = id;
        }
        
        private int getId() {
            return id;
        }
        
        private void setPrezzo (double p) {
            prezzo = p;
        }
    
    
    
    
        @Override
        public void actionPerformed(ActionEvent e) {
            addProduct();
        }
        
        /**
         * Metodo per aggiungere un prodotto all'ordinazione.
         */
        public void addProduct() {
            int ind = ShoppingCart.idProduct.indexOf(getId());
            if(ind == -1) {
                ShoppingCart.idProduct.add(getId());
                ShoppingCart.quantita.add(1);
            } else {
                int elem = ShoppingCart.quantita.get(ind);
                elem++;
                ShoppingCart.quantita.setElementAt(elem, ind);
            }
            Service.getService().setConto(prezzo);
    
    
           //QUI PUOI AGGIORNALE lblQuantita con la tua logica.
        }
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Dirò a tutti i giovani come me che devono farti santo!

    Scherzi a parte, davvero grazie! Almeno ora quando mi troverò dinnanzi a questo tipo di problema o saprò la soluzione o saprò aiutare il prossimo

  10. #10
    Nulla, però un consiglio permettimi di dartelo, separa sempre la logica di gui dall'accesso al database etc... Impara ad usare MVC e ti troverai meglio

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.