TUI menu

Tags:    java

Er der en nem måde at lave en java TUI menu på?

Altså en menu til command prompten, som f.eks. kunne se således ud
Fold kodeboks ind/udKode 


Jeg har selv siddet og forsøgt lidt, men det bliver noget rodet noget med den ene switch-case inden i den anden.

Det er umuligt at finde noget som helst på nettet om det synes jeg.



7 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 12 karma
Sorter efter stemmer Sorter efter dato
Bær over med de syntax fejl der måtte være. Det er mere for at give dig en ide til selve strukturen.

Jeg ville Oprette en switch som er "hoved menuen". Uder hver Case ville jeg lave en funktion.

fx. Vi har en hoved menu der ser således ud:

1) salg
2) ansatte
3) lager

Når der trykkes på 2 = ansatte, vil man få en ny menu frem der ser således ud:

1) opret
2) rediger
3) slet

I koden kan jeg godt følge dig i at det hurtigt kan blive overskueligt. For at holde det på et civiliceret plan, ville jeg skrive koden i en retning af:

Fold kodeboks ind/udKode 


Jeg håber det hjalp dig på rette vej.



Du kunne angribe problemet lidt mere objekt orienteret.

lav en klasse TUIMenupunkt, konstruktøren kunne jo passende tage teksten på menupunktet, og tilføj 2 metoder:
addEventListener(TUIEventListener e);
invoke();
første tager et objekt der er den kode der eksekveres når menupunktet vælges.
invoke aktiverer menupunktet.

TUIEventListener er et interface og kunne f.eks. se således ud:
public interface TUIEventListener{
void Action();
}

den sidste klasse kunne f.eks. hedde TUIMenu, og den skal have metoderne:
show(); der viser menuen, og beder brugeren om at foretage et valg, herefter kalder show invoke på det valgte menupunkt.
og selvfølgelig additem, der tilføjer et menupunkt.

et lille, formodentlig meget buggy, eksempel på anvendelse:
public class X{
TUIMenu menu = new TUIMenu();
TUIMenupunkt p1 = new MenuPunkt("menu 1");
TUIMenupunkt p2 = new MenuPunkt("menu 2");
TUIMenupunkt p3 = new MenuPunkt("menu 3");
TUIMenupunkt p4 = new MenuPunkt("quit");

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

public X(){
p4.addEventListener( new TUIEventListener{ //anonym klasse
public void action(){
//do stuff her, objekter du vil have adgang til her, som er i klassen X skal markeres final;
}
}}
}

god fornøjelse, jeg håber du kan bruge det til noget.

Hilsen
Troels



Jeg har for nylig lavet et poker-program hvor jeg skulle spørge brugeren om en helt masse...
Klassen kan både håndtere tal og strenge, via 2 forskellige metoder, og den sørger for alt fejlhåndtering...
Du skal blot ændre den lidt, så alle de kommandoer der findes i programmet ændres med mine...

Den er fint dokumenteret, men hvis ikke du forstår den skal du være velkommen til at spørge alt det du vil.
Om du kan bruge den i netop dit projekt ved jeg ikke, men det er i hvert fald en god måde at håndtere tekst-baseret inputs på :)

Fold kodeboks ind/udKode 


Klassen udskriver ikke de muligheder brugeren har automatisk, men du kan jo selv lige rette til hvis klassen har interesse at bruge :)



Indlæg senest redigeret d. 13.12.2006 00:41 af Bruger #10415
hmm... kunne man ikke gøre noget i den her retning

kan dog ikke lige huske hvordan man laver key bindings, men det kan du læse i en god tutorial http://java.sun.com/docs/books/tutorial/

Fold kodeboks ind/udKode 




Som jeg selv sagde så har jeg rodet noget med det med switch case's, men det bliver noget værre noget.

Ideen er god nok, hvis man ikke har så mange undermenuer, men når vi kommer derud af, bliver det meget indviklet, og ikke til at have med at gøre.

F.eks. hvis vi har 4 hovedmenuer, 4 undermenuer, 4 under-undermenuer og 4 under-under-undermenuer, så er vi ude i en switch case med 256 led, eller en kode med 256 metoder.

Det mit spørgsmål var, var om der var en lettere måde at gøre dette på?



Jeg lavede en gang en menu i C++:

http://damb.dk/snip/menu.html

Måske kan du bruge ideen.



Er ikke helt sikker på jeg er med på hvad du mener.
Jeg er en smule grøn inden for Java kodning, sådan så du gider skære det ud i pap for mig? ;)



t