Programmare in Java una lista della spesa/Interfaccia grafica (GUI)
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();
}
}