In meinem letzten Post habe ich die Farbgestaltung in Java etwas näher untersucht. Zusätzlich auch die Konsolensteuerung (Cursor bewegen, Konsoleninhalt manipulieren usw) getestet.
Daraus kann man ja schon eine Menge machen. Ich habe mich mal an einen „Splash Screen Generator“ gemacht. Klingt natürlich viel geiler als es ist.
Ziel soll es sein einen beliebigen umrahmten Text in beliebiger Farbgestaltung an beliebiger Stelle auf dem Bildschirm für eine beliebige Zeit anzeigen zu lassen. Für den Benutzer ist das mit 1 Funktionsaufruf besonders einfach gehalten.
Den Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.
import java.io.IOException; import java.io.*; import org.fusesource.jansi.AnsiConsole; import org.fusesource.jansi.*; public class test { public static final String CLS = "\u001b[2J"; public static final String TOP = "\u001b[0;1H"; public static final String UP = "\u001b[1F"; public static final String LEFT = "\u001b[1G"; public static final String DEL = "\u001b[2K"; public static final String DEL_LEFT = "\u001b[1K"; public static final String DEL_RIGHT = "\u001b[0K"; public static final String BOLD = "\u001b[1m"; public static final String RESET = "\u001b[0m"; public static final String SPLASH = "\u001b[1;37;1;44m"; public static void buildSplashScreen(String[] splash, int time, String Style, int x, int y) throws InterruptedException { Ansi ansi=Ansi.ansi(); // get longest element int maxlength = 0; for(String getmax : splash) { if(getmax.length() > maxlength) maxlength = getmax.length(); } // old style: AnsiConsole.out.print(SPLASH+"\u001b["+x+";"+y+"H"); AnsiConsole.out.print(SPLASH+ansi.cursor(x-1,y)); System.console().printf("\u2554"); for(int i = 0;i<maxlength+2;i++) { System.console().printf("\u2550"); } System.console().printf("\u2557\n"); for(int j = 0;j < splash.length;j++) { AnsiConsole.out.print(ansi.cursor(x,10)); x++; System.console().printf("\u2551 " + splash[j] + " \u2551\n"); } AnsiConsole.out.print(ansi.cursor(x,10)); System.console().printf("\u255A"); for(int k = 0;k<maxlength+2;k++) { System.console().printf("\u2550"); } System.console().printf("\u255D\n"); Thread.sleep(time); clearScreen(); } public static void clearScreen() { for(int i=0;i<50;i++) { AnsiConsole.out.println( RESET + DEL); } AnsiConsole.out.print( CLS + TOP ); } public static void main(String[] args) throws IOException, InterruptedException { try {AnsiConsole.systemInstall();}catch(Exception e){} Ansi ansi=Ansi.ansi(); String[] splash = new String[9]; splash[0] = " "; splash[1] = " _ _ _____ ____ "; splash[2] = "| | | |/ ____| / _| | "; splash[3] = "| |__| | (___ ___ ___ | |_| |___ ____ _ _ __ ___ "; splash[4] = "| __ |\\___ \\/ __|/ _ \\| _| __\\ \\ /\\ / / _` | '__/ _ \\"; splash[5] = "| | | |____) \\__ \\ (_) | | | |_ \\ V V / (_| | | | __/"; splash[6] = "|_| |_|_____/|___/\\___/|_| \\__| \\_/\\_/ \\__,_|_| \\___|"; splash[7] = " "; splash[8] = " "; buildSplashScreen(splash, 5000, SPLASH, 10, 10); try {System.in.read();}catch(Exception e){} } }
Die Funktion buildSplashScreen wird also mit 5 Parametern aufgerufen:
buildSplashScreen(String[] anzuzeigender-Text, int Anzeigedauer-in-Millisekunden, String Unicode-Farbstyle, int x-Koordinate, int y-Koordinate);
Den Anzeigetext als Array (ein- oder mehrzeilig möglich), Backslashes im Anzeigetext müssen natürlich doppelt gesetzt werden, Unicode Farbstyle als String mit einer Form ähnlich wie „\u001b[1;37;1;44m„, x- und y-Koordinate definiert die obere linke Ecke des Splash Screens.
Ausführung in Notepad++:
(schon mehrfach behandelt, aber nochmal zur Erinnerung)
Den Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.
@echo off :: jar(s) specified? if not [%4]==[] goto jars :: compile and run without externals jars if not [%1]==[] javac %1 if not [%2]==[] if not [%3]==[] start cmd.exe /c java -classpath %2 %3 :jars setlocal enabledelayedexpansion set /a N=0 :: reads up to 6 externals jars for /f "tokens=1,2,3 delims=;" %%a in ("%~4") do ( set /a N+=1 set j1=%%a set j2=%%b set j3=%%c ) set classpath=%~2 set jarpath=%~2 if not [%5]==[] set jarpath=%~5 set jars=. if not [%j1%]==[] set jars=%jars%;%jarpath%\%j1% if not [%j2%]==[] set jars=%jars%;%jarpath%\%j2% if not [%j3%]==[] set jars=%jars%;%jarpath%\%j3% :: compile and run with external jars if not [%1]==[] javac -cp "%jars%" %1 if not [%2]==[] if not [%3]==[] start cmd /c ""c:\Program Files\Java\jre7\bin\java" -cp "%jars%;%classpath%" %3" endlocal :: usage: :: just compile :: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" :: compile with 1 external .jar :: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "lib1.jar" :: compile with 1 external .jar :: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "lib1.jar;lib2.jar" :: just run java code :: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm" :: run java code with one or multiple external jars :: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm" "lib1.jar" :: run java code with one or multiple external jars - up to 3 jars supported (change lines 15-28 [if you know batch] for more) :: usage: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm" "lib1.jar;lib2.jar;jcurse.jar" :: Notepad++ F6 Code: :: NPP_SAVE :: ?:\path\to\executor.bat "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "one_or_multiple_external.jar"
Batch, .java Code und alle nötigen .jars (jansi.jar in diesem Fall) in ein Verzeichnis, in Notepad++ F6 drücken, folgenden Code (erst anpassen!) einfügen:
NPP_SAVE t:\Dropbox\Programmierung\Java\executor.bat "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "jansi.jar"
(bei mir liegen also .java, .jar und .bat in T:\Dropbox\Programmierung\Java\)
und dann sollte das funktionieren. Weitere Nutzungshinweise zur executor.bat befinden sich als Kommentar am Ende. Die Batch kann mittlerweile nur kompilieren (ohne und mit jars) und ausführen (ohne und mit jars).
Beachte: javac.exe und java.exe müssen in der Windows Umgebungsvariablen PATH eingetragen sein! siehe Vorbereitungen oder Google.
executor [.bat]
SplashScreen [.java]
SplashScreen [.class]
jansi [.jar]
Oh, der Hannes wird ja noch zum richtigen Hacker. :-]
wohl kaum mit java 😉