Vai al contenuto

Programmare in Java una lista della spesa/Interfaccia grafica (GUI)

Wikibooks, manuali e libri di testo liberi.

La classe listaSpesaGUI gestisce l'interfaccia grafica del programma, in essa viene utilizzata la classe Lista di oggetti Prodotti, precedentemente creata. Tale classe si crea selezionando in Eclipse : File --> New --> Class e digitando il nome della classe listaSpesaGUI . Il metodo public static void main(String[] args) contenuto in questa classe consente l'esecuzione del programma, per cui nel Package Explorer di Eclipse basta cliccare col destro su listaSpesaGUI.java e selezionare Run As --> Java Application per eseguire il programma.


package lista_spesa;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;


public class ListaSpesaGUI extends JFrame {
    private JTextField txtProdotto;
    private JTextField txtQuantita;
    private JComboBox<String> cmbScaffale, cmbSupermercato;
    private JList<String> lstProdotti;
    private DefaultListModel<String> listModel;
    private JButton btnAggiungi;
    private JButton btnRimuovi;
    private JButton btnSalvaCSV;
    private JButton btnSvuotaLista;
    private Lista listaSpesa;

    //Costruttore classe
    public ListaSpesaGUI() {
        // Impostazioni finestra
        setTitle("Lista della Spesa");
        setSize(1000, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        listaSpesa = new Lista();

        // Layout principale
        JPanel panel = new JPanel(new BorderLayout());
        setContentPane(panel);

        // Pannello superiore per l'input
        JPanel panelInput = new JPanel(new FlowLayout());
        panelInput.add(new JLabel("Prodotto:"));
        panelInput.add(txtProdotto = new JTextField(20));
        panelInput.add(new JLabel("Quantità:"));
        panelInput.add(txtQuantita = new JTextField(5));
        panelInput.add(new JLabel("Scaffale:"));
        String p[] = { "Surgelati","Frutta e Verdura","Frigo","Pasta","Vino",
        		"Dolcino","Casa","Succhi","Latticini","Acqua","Biscotti","Olio,aceto,passate",
        		"Colazione","Condimenti","Detersivi","Sacchetti","Igiene","Altro","Carne","Pane","Pesce"};
        Arrays.sort(p);
        cmbScaffale = new JComboBox<>(p);
        panelInput.add(cmbScaffale);
        panelInput.add(new JLabel("Supermercato:"));
        cmbSupermercato = new JComboBox<>(new String[]{"Lidl", "Conad", "Coop" });
        panelInput.add(cmbSupermercato);


        // Pannello destro per i pulsanti
        JPanel panelButton = new JPanel();
        panelButton.setLayout(new BoxLayout(panelButton,BoxLayout.Y_AXIS));
        panelButton.add(btnAggiungi = new JButton("Aggiungi"));
        panelButton.add(btnRimuovi = new JButton("Rimuovi"));
        panelButton.add(btnSalvaCSV = new JButton("Salva in CSV"));
        panelButton.add(btnSvuotaLista = new JButton("Cancella Lista"));


        panel.add(panelInput, BorderLayout.NORTH);
        panel.add(panelButton, BorderLayout.EAST);

        // Pannello centrale per la lista
        listModel = new DefaultListModel<>();
        lstProdotti = new JList<>(listModel);
        JScrollPane scrollPane = new JScrollPane(lstProdotti);
        panel.add(scrollPane, BorderLayout.CENTER);

        leggiProdotti();

        // Eventi dei pulsanti
        btnAggiungi.addActionListener(e -> {
            String prodotto = txtProdotto.getText();
            String quantita = txtQuantita.getText();
            String scaffale = (String) cmbScaffale.getSelectedItem();
            String supermercato = (String) cmbSupermercato.getSelectedItem();
            listModel.addElement(prodotto + " (" + quantita + ") - " + scaffale+ " - " + supermercato);
            listaSpesa.add(new Prodotto(prodotto,scaffale,supermercato,quantita));
            txtProdotto.setText("");
            txtQuantita.setText("");
        });

        btnRimuovi.addActionListener(e -> {
            int index = lstProdotti.getSelectedIndex();
            if (index != -1) {
                listModel.remove(index);
                listaSpesa.remove(index);
            }
        });


        btnSalvaCSV.addActionListener(e -> {
            salvaInCSV("listaSpesa");
            JOptionPane.showMessageDialog(null, "Lista salvata in listaSpesa.csv");
        });

        btnSvuotaLista.addActionListener(e -> {
        	int result=JOptionPane.showConfirmDialog(null,"Sei sicuro di voler cancellare tutta la lista?", getTitle(), JOptionPane.YES_NO_OPTION);
        	if (result==JOptionPane.YES_OPTION) {
	            listModel.clear();
	            listaSpesa.svuotaLista();
	            salvaInCSV("listaSpesa");
	        	}
        });


        setVisible(true);

    }


    private void salvaInCSV(String nomeFile) {
        try (FileWriter writer = new FileWriter(nomeFile + ".csv")) {
            for (Prodotto prodotto : listaSpesa.getProdotti()) {
                writer.write(prodotto.getNome() + "," + prodotto.getQuantita() + "," + prodotto.getScaffale() + "," + prodotto.getSupermercato()  + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void leggiProdotti() {
    	listModel.clear();
    	for (Prodotto prodotto : listaSpesa.getProdotti()) {
            listModel.addElement(prodotto.toString());

        }
    }


    public static void main(String[] args) {
        new ListaSpesaGUI();
    }
}