ciao a tutti!!volevo chiedere se qualcuno di voi ha mai fatto una classe menu in java..non mi serve un menù grafico ma grezzo, utilizzando il prompt dei comandi..qualcuno può darmi un idea o passarmi il codice??vi rigrazio anticipatamente!![]()
ciao a tutti!!volevo chiedere se qualcuno di voi ha mai fatto una classe menu in java..non mi serve un menù grafico ma grezzo, utilizzando il prompt dei comandi..qualcuno può darmi un idea o passarmi il codice??vi rigrazio anticipatamente!![]()
Scusa .... quali sono i tuoi dubbi o meglio dire .... quale è la difficoltà?? Sai almeno come gestire input/output sulla console?Originariamente inviato da fabiranni
utilizzando il prompt dei comandi..qualcuno può darmi un idea o passarmi il codice??
Stampi il menù con dei System.out.println(), poi richiedi all'utente la operazione (qui ci possono essere diverse strade: tramite BufferedReader oppure ad esempio tramite Scanner) e in base alla scelta esegui un certo metodo. Tutta la gestione del menù sarà in un loop, da cui si esce solo se l'utente sceglie una certa voce del menù.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
io devo fare una classe menu..ora ti riporto il codice di esempio che però non posso utilizzare..
package prog.io.menuTesto;
public class VoceMenu
{
private char scelta;
private String descrizione;
public VoceMenu(char scelta, String descrizione)
{
this.scelta = scelta;
this.descrizione = descrizione;
}
public String getDescrizione()
{
return descrizione;
}
public char getCarattereScelta()
{
return scelta;
}
-----------------------------------------------------------------------------------------
ackage prog.io.menuTesto;
import java.util.Arrays;
import prog.io.ConsoleInputManager;
import prog.io.ConsoleOutputManager;
// Referenced classes of package prog.io.menuTesto:
// MenuInconsistenteException, VoceMenu
public class Menu
{
private ConsoleOutputManager out;
private ConsoleInputManager in;
private VoceMenu menu[];
private String cornice;
private char carattereCornice;
public Menu(VoceMenu menu[], ConsoleInputManager in, ConsoleOutputManager out)
{
if(menu.length == 0)
{
throw new MenuInconsistenteException("Menu privo di voci.");
}
for(int i = 0; i < menu.length; i++)
{
for(int j = i + 1; j < menu.length; j++)
{
if(menu[i].getCarattereScelta() == menu[j].getCarattereScelta())
{
throw new MenuInconsistenteException("Ci sono pi\371 voci del menu con il medesimo carattere di scelta.");
}
}
}
int lunghezzaCornice = 0;
for(int i = 0; i < menu.length; i++)
{
if(menu[i].getDescrizione().length() > lunghezzaCornice)
{
lunghezzaCornice = menu[i].getDescrizione().length();
}
}
carattereCornice = '-';
char a[] = new char[lunghezzaCornice += 5];
Arrays.fill(a, carattereCornice);
cornice = new String(a);
this.in = in;
this.out = out;
this.menu = menu;
}
public char presenta()
{
return presenta("--- Scelta > ");
}
public char presenta(String prompt)
{
out.println(cornice);
for(int i = 0; i < menu.length; i++)
{
out.println((new StringBuilder(" ")).append(menu[i].getCarattereScelta()).append(" - ").append(menu[i].getDescrizione()).toString());
}
char c;
do
{
c = in.readChar(prompt);
} while(!cerca(c));
out.println();
return c;
}
private boolean cerca(char c)
{
int i;
for(i = menu.length - 1; i >= 0; i--)
{
if(c == menu[i].getCarattereScelta())
{
break;
}
}
return i != -1;
}
}
Infatti.. Pigrizia pura!
Voilà, tratto da un mio programmino..codice:// Legge una stringa da tastiera private static String leggi(){ InputStreamReader reader = new InputStreamReader (System.in); BufferedReader tastiera = new BufferedReader (reader); boolean errore; String lettura = ""; do{ errore = false; try{ lettura = tastiera.readLine(); }catch(IOException E){ errore = true; } }while(errore); return lettura; } /* * Legge una stringa da tastiera e restituisce il primo carattere * Se la stringa è vuota restituisce uno spazio */ private static char leggiScelta(){ String input = leggi(); if (input.length() > 0) return input.charAt(0); else return ' '; } //Pulisce lo schermo private static void clearScreen(){ String sistOp = System.getProperty("os.name"); if (sistOp.toLowerCase().indexOf("windows") != -1) //Su windows non ho ancora capito come fare! for(int i = 0; i < 200; i++) System.out.println("\n"); else System.out.println("\033[2J"); //Funziona sui sistemi Unix-like } public static void main(String argv[]){ char scelta = ''; do{ clearScreen(); System.out.println("******* Menù principale *******"); System.out.println("Cosa vuoi fare?"); System.out.println("1. Voce 1"); System.out.println("2. Voce 2"); System.out.println("3. Uscire"); scelta = leggiScelta(); switch(scelta){ case '1': faiCiòCheVuoi(); break; case '2': faiCiòCheVuoi2(); break; } }while(scelta != '4'); }
C'è anche un grezzo clearscreen, visto che fra i milioni di classi e metodi presenti in java non hanno pensato di metterlo..
EDIT: non avevo visto l'ultimo post, ma devi indentarlo decentemente se vuoi che lo legga!Poi non so gli altri!
E usa titoli migliori ;-)
grazie mille Tenebral!!eh che ho un progetto bello grosso e il tempo scarseggia..grazie mille davvero!
non ho capito cosa intendi..comunque io ho windows per quanto riguarda la pulizia dello schermo funziona solo con linux??
Sì, quella System.out.println("\033[2J"); scrive una "sequenza di escape" ECMA-48 che è riconosciuta sui sistemi Linux. Sui Windows no, in generale (funzionava una volta quando si caricava nel vecchio DOS il ANSI.SYS).Originariamente inviato da fabiranni
per quanto riguarda la pulizia dello schermo funziona solo con linux??
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Non so se quel grazie fosse ironico o meno, ma in tal caso, non puoi pretendere che il tempo scarseggi solo per te. Indentare un codice costa poco (e magari finché lo indenti, leggendolo, trovi anche da te soluzione al problema) e rende la lettura molto più rapida. ;-)
Quel clearscreen pulisce sia su Windows che su Linux, ma su Windows lo fa artificiosamente stampando 200 righe vuote.
@fabiranni: i titoli delle discussioni vanno dati sensatamente, come espressamente richiesto dal regolamento. Se ti serve aiuto su un menu, scrivi che ti serve aiuto su un menu.
Modifico io.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
scusa ma sono nuovo e mi sono iscritto oggi![]()