Java #1 – dynamisch-breite Titel-Box in der Konsole erstellen dank ASCII/Unicode Nutzung

Meine ersten Schritte in Java sind getan. Diese beschrĂ€nken sich noch auf die Textausgabe in einer Konsolenanwendung aber nach „Hello World“ kommt nunmal sowas 😀
Gestern Abend habe ich meine erste Anwendung geschrieben.

Ziel: Sie soll die Nutzung von Unicode Zeichen zum Aufbau einer „Titel Box“ verdeutlichen und dabei den Unterschied zwischen System.out und System.console() hervorheben. Am Ende wird der Aufbau dynamisch abhĂ€ngig vom beinhalteten Text gestaltet und in einer Funktion verpackt.
Alle Anmerkungen, Hinweise, Links und Quellen stehen im Code.

Code

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

public class Gruppenmitglieder {

/**
	Author: 	 Hannes Schurig
	Created: 	 6.4.2012 22:16
	Changed: 	 7.4.2012 00:28
	Version: 	 1.1
	Changelog:
		v1.1:	 Code der for-Schleife optimiert
		v1.0:	 Erstellung der GUI mit einer Funktion,
				 Ausgabe aller Namen eines festgelegten Arrays untereinander
	Title: 		 Gruppenmitglieder
	Description: Mein erster Versuch mit Java. Ziel ist die Ausgabe von vielen Namen.
				 Die Ausgabe soll mit nur 1 Schleife und einem Array erfolgen um
				 möglichst flexibel einsetzbar zu sein.
				 Ich ergÀnze das um einen Titel-Prototyp. Dieser soll dynamisch mit
				 einer Funktion erstellt werden können um ebenfalls flexibel und
				 einfach anwendbar zu sein.
**/

	public static void buildGUI(String text) {
		int length = text.length();
		String slength = String.valueOf(length);

		// Box mit den richtigen Maßen bauen
		System.console().printf("\u2554");
		for(int i=0; i<length; i++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u2557\n");
		System.console().printf("\u2551"+text+"\u2551 \n");
		System.console().printf("\u255A");
		for(int i=0; i<length; i++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u255D \n");
	}

	public static void main(String[] args) {
		/**
		   Hat 2 Stunden gedauert das Zusammenspiel des Character Encoding von Windows
		   und Java halbwegs zu verstehen. Die Windows CMD arbeitet mit der alten ANSI
		   Kodierung und System.out verwendet stur diese Systemkodierung.
		   ANSI beinhaltet aber zu wenig schöne Zeichen.
		   FĂŒr Extended ASCII und Unicode muss man System.console() nutzen,
		   wenn man nicht die Codepage des Systems vor der AusfĂŒhrung verstellen
		   möchte (was nicht zu empfehlen ist).
		   System.console() erkennt die benötigte Kodierung automatisch.
		   Quelle: http://bit.ly/Htl3SH

		   BOX_DRAWING Unicode Chars: http://bit.ly/HtlmNb

		   Double Box Codes skizziert:

		   2554 2550 2566 2550 2557

		   2551      2551      2551

		   2560 2550 256C 2550 2563

		   2551      2551      2551

		   255A 2550 2569 2550 255D

		   Mehr? Alle Unicode Characters: http://bit.ly/HtmyjI

		   Let's go!

		**/

		/**
			einfache leere Box
			__________________
		**/
		System.console().printf("Box:\n");

		System.console().printf("\u2554\u2550\u2550\u2550\u2557 \n");
		System.console().printf("\u2551   \u2551 \n");
		System.console().printf("\u255A\u2550\u2550\u2550\u255D \n");


		/**
			breite Box mit wenig Code dank Schleife
			_______________________________________
		**/
		System.console().printf("breite Box:\n");

		// oberer Rand
		System.console().printf("\u2554");
		for(int i=0; i<19; i++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u2557 \n");

		// Mitte mit Text
		System.console().printf("\u2551 Dies ist ein Test \u2551 \n");

		// unterer Rand
		System.console().printf("\u255A");
		for(int i=0; i<19; i++) {
					System.console().printf("\u2550");
		}
		System.console().printf("\u255D \n");


		/**
			dynamische Boxbreite dank ZeichenzÀhlung
			________________________________________
		**/
		System.console().printf("dynamische Box:\n");

		// gewĂŒnschter Boxtext (sollte nicht zu lang sein), Zeichen zĂ€hlen
		String text = " 6.4.2012  |  Gruppenmitglieder ausgeben  |  Hannes Schurig ";
		int length = text.length();
		String slength = String.valueOf(length);

		// Box mit den richtigen Maßen bauen
		System.console().printf("\u2554");
		for(int i=0; i<length; i++) {
					System.console().printf("\u2550");
				}
		System.console().printf("\u2557\n");
		System.console().printf("\u2551"+text+"\u2551 \n");
		System.console().printf("\u255A");
				for(int i=0; i<length; i++) {
							System.console().printf("\u2550");
				}
		System.console().printf("\u255D \n");

		/**
			Programmieren I: LE01 Übung: Aufgabenblatt 1: Gruppenmitglieder ausgeben
			________________________________________________________________________
		**/
		System.out.println("");
		System.console().printf("Programmieren I: LE01 Übung: Aufgabenblatt 1: Gruppenmitglieder ausgeben:\n");
		System.out.println("");

		// Titel erstellen
		buildGUI(" 6.4.2012  |  Gruppenmitglieder ausgeben  |  Hannes Schurig ");
		System.out.println("");
		System.out.println("");

		// Namen festelegen
		String[] namen = {"Hannes Schurig", "Max Mustermann", "Max Mustermann", "und viele mehr"};

		// sexy Abarbeitung von Arrays mit wenig Code: http://bit.ly/HoeKyp
		for(String s : namen){
			System.console().printf(s+"\n");
		}

		System.out.println("");
		System.out.println("");


		/**
			Farbige Ausgabe war leider nicht so einfach wie gedacht, DOS ist da etwas
			zu alt fĂŒr. Es gibt portable AnsĂ€tze aber die sind mir jetzt zu krass.
			Siehe: http://bit.ly/Htrg0Y
		**/
	}

}

Hinweis: Ich benutze Javadoc Kommentarblöcke (mit 2 Sternen) weil die Blog-Code-Anzeige bei normalen Kommentarblöcken (mit 1 Stern) spinnt. Dient also nur der korrekten Darstellung im Blog.

Ausgabe:

Schreibe einen Kommentar