GlobalGUI + FinestraInserisciAlunno

This commit is contained in:
La Programmatrice Verde
2025-12-03 23:56:28 +01:00
parent 283674f206
commit f72549f93a
5 changed files with 296 additions and 128 deletions

View File

@@ -4,10 +4,156 @@
*/ */
package gradeanalyzer; package gradeanalyzer;
import java.util.ArrayList;
import com.googlecode.lanterna.graphics.SimpleTheme;
import com.googlecode.lanterna.graphics.Theme;
import com.googlecode.lanterna.gui2.BasicWindow;
import com.googlecode.lanterna.gui2.Button;
import com.googlecode.lanterna.gui2.EmptySpace;
import com.googlecode.lanterna.gui2.GridLayout;
import com.googlecode.lanterna.gui2.Label;
import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.TextBox;
import com.googlecode.lanterna.gui2.Window;
import com.googlecode.lanterna.gui2.dialogs.MessageDialog;
import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton;
/** /**
* *
* @author Verde * @author Verde
*/ */
public class FinestraInserisciAlunno { public class FinestraInserisciAlunno extends BasicWindow {
public FinestraInserisciAlunno() {
super("Inserisci alunno");
ArrayList<Window.Hint> windowHints = new ArrayList<>();
windowHints.add(Window.Hint.CENTERED);
this.setHints(windowHints);
Panel contenutoFinestra = new Panel(new GridLayout(2));
TextBox campoNome = new TextBox();
TextBox campoCognome = new TextBox();
TextBox campoVoto = new TextBox();
contenutoFinestra.addComponent(new Label("Nome: "));
contenutoFinestra.addComponent(
campoNome
.setLayoutData(
GridLayout.createLayoutData(GridLayout.Alignment.BEGINNING,
GridLayout.Alignment.CENTER)));
contenutoFinestra.addComponent(new EmptySpace());
contenutoFinestra.addComponent(new EmptySpace());
contenutoFinestra.addComponent(new Label("Cognome: "));
contenutoFinestra.addComponent(
campoCognome
.setLayoutData(
GridLayout.createLayoutData(GridLayout.Alignment.BEGINNING,
GridLayout.Alignment.CENTER)));
contenutoFinestra.addComponent(new EmptySpace());
contenutoFinestra.addComponent(new EmptySpace());
contenutoFinestra.addComponent(new Label("Voto: "));
contenutoFinestra.addComponent(
campoVoto
.setLayoutData(
GridLayout.createLayoutData(GridLayout.Alignment.BEGINNING,
GridLayout.Alignment.CENTER)));
contenutoFinestra.addComponent(new EmptySpace());
contenutoFinestra.addComponent(new EmptySpace());
contenutoFinestra.addComponent(new Button("Conferma", () -> {
// imposta gli stati
GradeAnalyzer.isSaved = false;
GradeAnalyzer.isEmpty = false;
double voto = -1;
boolean validitaCampoNome = !campoNome.getText().isBlank() && !campoNome.getText().isEmpty();
boolean validitaCampoCognome = !campoCognome.getText().isBlank() && !campoCognome.getText().isEmpty();
boolean validitaCampoVoto = !campoVoto.getText().isBlank() && !campoVoto.getText().isEmpty();
if (!validitaCampoNome) {
GlobalGUI.showErrorMessage("Il nome non può essere vuoto.");
}
if (!validitaCampoCognome) {
GlobalGUI.showErrorMessage("Il cognome non può essere vuoto.");
}
if (!validitaCampoVoto) {
GlobalGUI.showErrorMessage("Il voto non può essere vuoto.");
} else {
voto = voto(campoVoto.getText());
}
if (voto != -1 && validitaCampoNome && validitaCampoCognome) {
inserisciDati(campoNome.getText().trim(), campoCognome.getText().trim(),
voto);
this.close();
}
}));
contenutoFinestra.addComponent(new Button("Indietro", this::close));
this.setComponent(contenutoFinestra);
}
private static boolean inserisciDati(String nome, String cognome, double voto) {
int posizione;
boolean notUpdated = false;
if ((posizione = exists(nome, cognome, GradeAnalyzer.valutazioni)) != -1) {
boolean scelta = GlobalGUI.showBooleanWarningMessage("Lo studente esiste già.\n\nAggiornarne i dati?");
if (scelta) {
GradeAnalyzer.valutazioni.get(posizione).setVoto(voto);
GlobalGUI.showNoteMessage("Studente aggiunto correttamente.");
} else {
GlobalGUI.showNoteMessage("Lo studente non è stato aggiornato.");
notUpdated = true;
}
} else {
GradeAnalyzer.valutazioni.add(new Valutazione(nome, cognome, voto));
GlobalGUI.showNoteMessage("Studente aggiunto correttamente.");
}
GlobalGUI.salvaValutazioni();
return notUpdated;
}
private static double voto(String votoStringa) {
double voto = -1;
final double VOTO_MINIMO = 1;
final double VOTO_MASSIMO = 10;
if (Math.round((Double.parseDouble(votoStringa) * 10) / 10) < VOTO_MINIMO
|| Math.round((Double.parseDouble(votoStringa) * 10) / 10) > VOTO_MASSIMO) {
GlobalGUI.showErrorMessage("Il voto deve essere compreso tra " + VOTO_MINIMO + " e " + VOTO_MASSIMO + ".");
} else {
voto = Math.round((Double.parseDouble(votoStringa) * 10) / 10);
}
return voto;
}
private static int exists(String nome, String cognome, ArrayList<Valutazione> valutazioni) {
boolean exit = false;
int posizione = -1;
for (int i = 0; i < valutazioni.size() && !exit; i++) {
if (nome.equalsIgnoreCase(valutazioni.get(i).getNome())
&& cognome.equalsIgnoreCase(valutazioni.get(i).getCognome())) {
posizione = i;
exit = true;
}
}
return posizione;
}
} }

View File

@@ -9,12 +9,11 @@ import java.util.ArrayList;
import com.googlecode.lanterna.gui2.BasicWindow; import com.googlecode.lanterna.gui2.BasicWindow;
import com.googlecode.lanterna.gui2.Button; import com.googlecode.lanterna.gui2.Button;
import com.googlecode.lanterna.gui2.Direction; import com.googlecode.lanterna.gui2.Direction;
import com.googlecode.lanterna.gui2.EmptySpace;
import com.googlecode.lanterna.gui2.Label; import com.googlecode.lanterna.gui2.Label;
import com.googlecode.lanterna.gui2.LinearLayout; import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.MultiWindowTextGUI;
import com.googlecode.lanterna.gui2.Panel; import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.Window; import com.googlecode.lanterna.gui2.Window;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import com.googlecode.lanterna.gui2.menu.MenuItem; import com.googlecode.lanterna.gui2.menu.MenuItem;
/** /**
@@ -22,7 +21,7 @@ import com.googlecode.lanterna.gui2.menu.MenuItem;
* @author Verde * @author Verde
*/ */
public class FinestraPrincipale extends BasicWindow { public class FinestraPrincipale extends BasicWindow {
public FinestraPrincipale(WindowBasedTextGUI gui) { public FinestraPrincipale() {
super("Selezionare una delle seguenti opzioni:"); super("Selezionare una delle seguenti opzioni:");
ArrayList<Window.Hint> windowHints = new ArrayList<>(); ArrayList<Window.Hint> windowHints = new ArrayList<>();
@@ -31,28 +30,25 @@ public class FinestraPrincipale extends BasicWindow{
Panel contenutoFinestra = new Panel(new LinearLayout(Direction.VERTICAL)); Panel contenutoFinestra = new Panel(new LinearLayout(Direction.VERTICAL));
contenutoFinestra.addComponent(new MenuItem("Inserisci dati alunno", () -> contenutoFinestra.addComponent(new MenuItem("Inserisci dati alunno",
new BasicWindow("KEK") () -> GlobalGUI.getGui().addWindowAndWait(new FinestraInserisciAlunno())));
)); contenutoFinestra.addComponent(new MenuItem("Trova voto più alto e più basso",
contenutoFinestra.addComponent(new MenuItem("Trova voto più alto e più basso", () -> () -> openWindow("Trova voto più alto e più basso", "Questa è la finestra.")));
openWindow(gui, "Trova voto più alto e più basso", "Questa è la finestra.") contenutoFinestra.addComponent(new MenuItem("Promossi", () -> openWindow("Promossi", "Questa è la finestra.")));
));
contenutoFinestra.addComponent(new MenuItem("Promossi", () -> contenutoFinestra.addComponent(new EmptySpace());
openWindow(gui, "Promossi", "Questa è la finestra.")
));
contenutoFinestra.addComponent(new Button("Esci", () -> System.exit(0))); contenutoFinestra.addComponent(new Button("Esci", () -> System.exit(0)));
this.setComponent(contenutoFinestra); this.setComponent(contenutoFinestra);
// Contenuto della finestra principale // Contenuto della finestra principale
// contenutoFinestra.addComponent(new EmptySpace()); // Margine // contenutoFinestra.addComponent(new EmptySpace()); // Margine
this.setComponent(contenutoFinestra); this.setComponent(contenutoFinestra);
} }
private static void openWindow(WindowBasedTextGUI gui, String title, String text) { private static void openWindow(String title, String text) {
BasicWindow window = new BasicWindow(title); BasicWindow window = new BasicWindow(title);
Panel panel = new Panel(new LinearLayout(Direction.VERTICAL)); Panel panel = new Panel(new LinearLayout(Direction.VERTICAL));
@@ -61,6 +57,6 @@ public class FinestraPrincipale extends BasicWindow{
window.setComponent(panel); window.setComponent(panel);
gui.addWindow(window); GlobalGUI.getGui().addWindow(window);
} }
} }

View File

@@ -4,10 +4,56 @@
*/ */
package gradeanalyzer; package gradeanalyzer;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import com.googlecode.lanterna.gui2.dialogs.MessageDialog;
import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton;
/** /**
* *
* @author Verde * @author Verde
*/ */
public class GlobalGUI { public class GlobalGUI {
private static WindowBasedTextGUI gui;
public static void setGui(WindowBasedTextGUI g) {
gui = g;
}
public static WindowBasedTextGUI getGui() {
return gui;
}
public static void showErrorMessage(String message) {
MessageDialog.showMessageDialog(GlobalGUI.getGui(), "Errore",
message,
MessageDialogButton.OK);
}
public static void showNoteMessage(String message) {
MessageDialog.showMessageDialog(GlobalGUI.getGui(), "Nota",
message,
MessageDialogButton.OK);
}
public static boolean showBooleanWarningMessage(String message) {
return MessageDialog.showMessageDialog(
GlobalGUI.getGui(),
"Attenzione",
message,
MessageDialogButton.Yes,
MessageDialogButton.No) == MessageDialogButton.Yes;
}
public static void salvaValutazioni() {
boolean scelta = GlobalGUI.showBooleanWarningMessage("Salvare i dati?");
if (scelta) {
GradeAnalyzer.salva(GradeAnalyzer.valutazioni, GradeAnalyzer.PATH_VOTI);
GradeAnalyzer.valutazioni = GradeAnalyzer.valutazioniDaFile();
GradeAnalyzer.isSaved = true;
} else {
GlobalGUI.showNoteMessage("I dati non sono stati salvati.");
}
}
} }

View File

@@ -14,20 +14,8 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Scanner; import java.util.Scanner;
import com.googlecode.lanterna.TerminalPosition;
import com.googlecode.lanterna.gui2.BasicWindow;
import com.googlecode.lanterna.gui2.Button;
import com.googlecode.lanterna.gui2.Direction;
import com.googlecode.lanterna.gui2.EmptySpace;
import com.googlecode.lanterna.gui2.Label;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.MultiWindowTextGUI; import com.googlecode.lanterna.gui2.MultiWindowTextGUI;
import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.Window;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI; import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import com.googlecode.lanterna.gui2.menu.MenuBar;
import com.googlecode.lanterna.gui2.menu.MenuItem;
import com.googlecode.lanterna.gui2.menu.Menu;
import com.googlecode.lanterna.screen.Screen; import com.googlecode.lanterna.screen.Screen;
import com.googlecode.lanterna.screen.TerminalScreen; import com.googlecode.lanterna.screen.TerminalScreen;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory; import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
@@ -51,82 +39,84 @@ public class GradeAnalyzer {
static boolean isEmpty = true; static boolean isEmpty = true;
/* /*
public static void main(String[] args) { * public static void main(String[] args) {
int scelta = -1; * int scelta = -1;
*
do { * do {
System.out.println("Scegliere un'opzione:"); * System.out.println("Scegliere un'opzione:");
System.out.println("1. Inserisci dati alunno"); * System.out.println("1. Inserisci dati alunno");
System.out.println("2. Trova voto più alto e più basso"); * System.out.println("2. Trova voto più alto e più basso");
System.out.println("3. Promossi"); * System.out.println("3. Promossi");
System.out.println("0. Esci"); * System.out.println("0. Esci");
System.out.print("Opzione: "); * System.out.print("Opzione: ");
*
try { * try {
scelta = sc.nextInt(); * scelta = sc.nextInt();
sc.nextLine(); * sc.nextLine();
*
switch (scelta) { * switch (scelta) {
case 0: * case 0:
break; * break;
case 1: * case 1:
isSaved = false; * isSaved = false;
isEmpty = false; * isEmpty = false;
inserisciDati(); * inserisciDati();
System.out.println("Studente aggiunto correttamente."); * System.out.println("Studente aggiunto correttamente.");
pausa(); * pausa();
break; * break;
case 2: * case 2:
if (isEmpty) { * if (isEmpty) {
System.out.println( * System.out.println(
"Errore: inserire almeno la valutazione di uno studente prima di proseguire."); * "Errore: inserire almeno la valutazione di uno studente prima di proseguire."
} else { * );
if (!isSaved) { * } else {
System.out.println("Attenzione: ci sono dati non salvati."); * if (!isSaved) {
salvaValutazioni(); * System.out.println("Attenzione: ci sono dati non salvati.");
} * salvaValutazioni();
trovaMigliorePeggiore(); * }
} * trovaMigliorePeggiore();
pausa(); * }
break; * pausa();
case 3: * break;
if (isEmpty) { * case 3:
System.out.println( * if (isEmpty) {
"Errore: inserire almeno la valutazione di uno studente prima di proseguire."); * System.out.println(
} else { * "Errore: inserire almeno la valutazione di uno studente prima di proseguire."
if (!isSaved) { * );
System.out.println("Attenzione: ci sono dati non salvati."); * } else {
System.out.println("Verranno salvati automaticamente."); * if (!isSaved) {
salva(valutazioni, PATH_VOTI); * System.out.println("Attenzione: ci sono dati non salvati.");
valutazioni = valutazioniDaFile(); * System.out.println("Verranno salvati automaticamente.");
isSaved = true; * salva(valutazioni, PATH_VOTI);
} * valutazioni = valutazioniDaFile();
promossi(); * isSaved = true;
} * }
pausa(); * promossi();
break; * }
default: * pausa();
System.out.println(ERRORE_GENERICO); * break;
pausa(); * default:
break; * System.out.println(ERRORE_GENERICO);
} * pausa();
} catch (InputMismatchException _) { * break;
System.out.println("Errore: scelta non valida."); * }
pausa(); * } catch (InputMismatchException _) {
} * System.out.println("Errore: scelta non valida.");
} while (scelta != 0); * pausa();
} * }
* } while (scelta != 0);
* }
*/ */
public static void main(String[] args) { public static void main(String[] args) {
try (Screen schermo = new TerminalScreen(new DefaultTerminalFactory().createTerminal())) { try (Screen schermo = new TerminalScreen(new DefaultTerminalFactory().createTerminal())) {
schermo.startScreen(); // crea terminale, inserisci CRT e dai corrente schermo.startScreen(); // crea terminale, inserisci CRT e dai corrente
final WindowBasedTextGUI gui = new MultiWindowTextGUI(schermo); // crea interfaccia con le finestre final WindowBasedTextGUI gui = new MultiWindowTextGUI(schermo); // crea interfaccia con le finestre
GlobalGUI.setGui(gui);
gui.addWindowAndWait(new FinestraPrincipale(gui)); gui.addWindowAndWait(new FinestraPrincipale());
} } catch (IOException e) {
catch (IOException e) {
System.out.println("Qualcosa è andato storto nella creazione dell'interfaccia."); System.out.println("Qualcosa è andato storto nella creazione dell'interfaccia.");
System.out.println(e.getMessage()); System.out.println(e.getMessage());
e.printStackTrace(); e.printStackTrace();
@@ -281,7 +271,8 @@ public class GradeAnalyzer {
} while (!exit); } while (!exit);
} }
static void salva(ArrayList<Valutazione> valutazioni, String path) { static String salva(ArrayList<Valutazione> valutazioni, String path) {
String messaggio = null;
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (Valutazione valutazione : valutazioni) { for (Valutazione valutazione : valutazioni) {
@@ -294,10 +285,12 @@ public class GradeAnalyzer {
} }
bw.write(sb.toString()); bw.write(sb.toString());
System.out.println("Dati salvati correttamente."); messaggio = "Dati salvati correttamente.";
} catch (IOException e) { } catch (IOException e) {
System.out.println("Errore nella scrittura del file: " + e.getMessage()); messaggio = "Errore nella scrittura del file: " + e.getMessage();
} }
return messaggio;
} }
static void trovaMigliorePeggiore() { static void trovaMigliorePeggiore() {

View File

@@ -1,13 +0,0 @@
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package gradeanalyzer;
/**
*
* @author Verde
*/
public class RecoloredTheme {
}