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;
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
*/
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,50 +9,46 @@ import java.util.ArrayList;
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.Panel;
import com.googlecode.lanterna.gui2.Window;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import com.googlecode.lanterna.gui2.menu.MenuItem;
/**
*
* @author Verde
*/
public class FinestraPrincipale extends BasicWindow{
public FinestraPrincipale(WindowBasedTextGUI gui) {
public class FinestraPrincipale extends BasicWindow {
public FinestraPrincipale() {
super("Selezionare una delle seguenti opzioni:");
ArrayList<Window.Hint> windowHints = new ArrayList<>();
windowHints.add(Window.Hint.CENTERED);
this.setHints(windowHints);
super("Selezionare una delle seguenti opzioni:");
ArrayList<Window.Hint> windowHints = new ArrayList<>();
windowHints.add(Window.Hint.CENTERED);
this.setHints(windowHints);
Panel contenutoFinestra = new Panel(new LinearLayout(Direction.VERTICAL));
contenutoFinestra.addComponent(new MenuItem("Inserisci dati alunno", () ->
new BasicWindow("KEK")
));
contenutoFinestra.addComponent(new MenuItem("Trova voto più alto e più basso", () ->
openWindow(gui, "Trova voto più alto e più basso", "Questa è la finestra.")
));
contenutoFinestra.addComponent(new MenuItem("Promossi", () ->
openWindow(gui, "Promossi", "Questa è la finestra.")
));
contenutoFinestra.addComponent(new Button("Esci", () -> System.exit(0)));
this.setComponent(contenutoFinestra);
Panel contenutoFinestra = new Panel(new LinearLayout(Direction.VERTICAL));
contenutoFinestra.addComponent(new MenuItem("Inserisci dati alunno",
() -> GlobalGUI.getGui().addWindowAndWait(new FinestraInserisciAlunno())));
contenutoFinestra.addComponent(new MenuItem("Trova voto più alto e più basso",
() -> openWindow("Trova voto più alto e più basso", "Questa è la finestra.")));
contenutoFinestra.addComponent(new MenuItem("Promossi", () -> openWindow("Promossi", "Questa è la finestra.")));
contenutoFinestra.addComponent(new EmptySpace());
contenutoFinestra.addComponent(new Button("Esci", () -> System.exit(0)));
this.setComponent(contenutoFinestra);
// Contenuto della finestra principale
//contenutoFinestra.addComponent(new EmptySpace()); // Margine
// contenutoFinestra.addComponent(new EmptySpace()); // Margine
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);
Panel panel = new Panel(new LinearLayout(Direction.VERTICAL));
@@ -61,6 +57,6 @@ public class FinestraPrincipale extends BasicWindow{
window.setComponent(panel);
gui.addWindow(window);
GlobalGUI.getGui().addWindow(window);
}
}

View File

@@ -4,10 +4,56 @@
*/
package gradeanalyzer;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import com.googlecode.lanterna.gui2.dialogs.MessageDialog;
import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton;
/**
*
* @author Verde
*/
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.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.Panel;
import com.googlecode.lanterna.gui2.Window;
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.TerminalScreen;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
@@ -51,88 +39,90 @@ public class GradeAnalyzer {
static boolean isEmpty = true;
/*
public static void main(String[] args) {
int scelta = -1;
do {
System.out.println("Scegliere un'opzione:");
System.out.println("1. Inserisci dati alunno");
System.out.println("2. Trova voto più alto e più basso");
System.out.println("3. Promossi");
System.out.println("0. Esci");
System.out.print("Opzione: ");
try {
scelta = sc.nextInt();
sc.nextLine();
switch (scelta) {
case 0:
break;
case 1:
isSaved = false;
isEmpty = false;
inserisciDati();
System.out.println("Studente aggiunto correttamente.");
pausa();
break;
case 2:
if (isEmpty) {
System.out.println(
"Errore: inserire almeno la valutazione di uno studente prima di proseguire.");
} else {
if (!isSaved) {
System.out.println("Attenzione: ci sono dati non salvati.");
salvaValutazioni();
}
trovaMigliorePeggiore();
}
pausa();
break;
case 3:
if (isEmpty) {
System.out.println(
"Errore: inserire almeno la valutazione di uno studente prima di proseguire.");
} else {
if (!isSaved) {
System.out.println("Attenzione: ci sono dati non salvati.");
System.out.println("Verranno salvati automaticamente.");
salva(valutazioni, PATH_VOTI);
valutazioni = valutazioniDaFile();
isSaved = true;
}
promossi();
}
pausa();
break;
default:
System.out.println(ERRORE_GENERICO);
pausa();
break;
}
} catch (InputMismatchException _) {
System.out.println("Errore: scelta non valida.");
pausa();
}
} while (scelta != 0);
}
*/
* public static void main(String[] args) {
* int scelta = -1;
*
* do {
* System.out.println("Scegliere un'opzione:");
* System.out.println("1. Inserisci dati alunno");
* System.out.println("2. Trova voto più alto e più basso");
* System.out.println("3. Promossi");
* System.out.println("0. Esci");
* System.out.print("Opzione: ");
*
* try {
* scelta = sc.nextInt();
* sc.nextLine();
*
* switch (scelta) {
* case 0:
* break;
* case 1:
* isSaved = false;
* isEmpty = false;
* inserisciDati();
* System.out.println("Studente aggiunto correttamente.");
* pausa();
* break;
* case 2:
* if (isEmpty) {
* System.out.println(
* "Errore: inserire almeno la valutazione di uno studente prima di proseguire."
* );
* } else {
* if (!isSaved) {
* System.out.println("Attenzione: ci sono dati non salvati.");
* salvaValutazioni();
* }
* trovaMigliorePeggiore();
* }
* pausa();
* break;
* case 3:
* if (isEmpty) {
* System.out.println(
* "Errore: inserire almeno la valutazione di uno studente prima di proseguire."
* );
* } else {
* if (!isSaved) {
* System.out.println("Attenzione: ci sono dati non salvati.");
* System.out.println("Verranno salvati automaticamente.");
* salva(valutazioni, PATH_VOTI);
* valutazioni = valutazioniDaFile();
* isSaved = true;
* }
* promossi();
* }
* pausa();
* break;
* default:
* System.out.println(ERRORE_GENERICO);
* pausa();
* break;
* }
* } catch (InputMismatchException _) {
* System.out.println("Errore: scelta non valida.");
* pausa();
* }
* } while (scelta != 0);
* }
*/
public static void main(String[] args) {
try (Screen schermo = new TerminalScreen(new DefaultTerminalFactory().createTerminal())) {
schermo.startScreen(); //crea terminale, inserisci CRT e dai corrente
final WindowBasedTextGUI gui = new MultiWindowTextGUI(schermo); //crea interfaccia con le finestre
schermo.startScreen(); // crea terminale, inserisci CRT e dai corrente
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(e.getMessage());
e.printStackTrace();
}
}
public static void pausa() {
System.out.println("Premere un tasto per continuare. . .");
sc.nextLine();
@@ -281,7 +271,8 @@ public class GradeAnalyzer {
} 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))) {
StringBuilder sb = new StringBuilder();
for (Valutazione valutazione : valutazioni) {
@@ -294,10 +285,12 @@ public class GradeAnalyzer {
}
bw.write(sb.toString());
System.out.println("Dati salvati correttamente.");
messaggio = "Dati salvati correttamente.";
} 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() {

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 {
}