{"id":446,"date":"2024-06-14T20:20:33","date_gmt":"2024-06-14T19:20:33","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=446"},"modified":"2024-06-30T20:25:19","modified_gmt":"2024-06-30T19:25:19","slug":"ansi-codes-zur-farbgestaltung-von-konsolenausgaben-in-java","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=446","title":{"rendered":"ANSI-Codes zur Farbgestaltung von Konsolenausgaben in Java"},"content":{"rendered":"\n<p>Die Verwendung von ANSI-Codes ist eine g\u00e4ngige Methode, um Konsolenausgaben farblich zu gestalten und somit die Lesbarkeit und Benutzererfahrung zu verbessern. ANSI-Codes sind spezielle Escape-Sequenzen, die von vielen Terminals unterst\u00fctzt werden, um Textattribute wie Farbe, Hintergrund und Textstil zu \u00e4ndern. Dieser Artikel beschreibt die Nutzung von ANSI-Codes zur Farbgestaltung von Konsolenausgaben unter MacOS\/Linux und Windows und zeigt entsprechende Java-Code-Beispiele.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Grundlagen der ANSI-Codes<\/h3>\n\n\n\n<p>ANSI-Codes sind in der Regel in der Form <code>\\033[&lt;Code&gt;m<\/code> aufgebaut, wobei <code>\\033<\/code> das Escape-Zeichen ist und <code>&lt;Code&gt;<\/code> eine Zahlenkombination, die das gew\u00fcnschte Attribut bestimmt. Hier sind einige der h\u00e4ufigsten ANSI-Codes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Textfarbe Vordergrund<\/strong>:<\/li>\n\n\n\n<li>Schwarz: <code>\\033[30m<\/code><\/li>\n\n\n\n<li>Rot: <code>\\033[31m<\/code><\/li>\n\n\n\n<li>Gr\u00fcn: <code>\\033[32m<\/code><\/li>\n\n\n\n<li>Gelb: <code>\\033[33m<\/code><\/li>\n\n\n\n<li>Blau: <code>\\033[34m<\/code><\/li>\n\n\n\n<li>Magenta: <code>\\033[35m<\/code><\/li>\n\n\n\n<li>Cyan: <code>\\033[36m<\/code><\/li>\n\n\n\n<li>Wei\u00df: <code>\\033[37m<\/code><\/li>\n\n\n\n<li><strong>Textfarbe Hintergrund<\/strong>:<\/li>\n\n\n\n<li>Schwarz: <code>\\033[40m<\/code><\/li>\n\n\n\n<li>Rot: <code>\\033[41m<\/code><\/li>\n\n\n\n<li>Gr\u00fcn: <code>\\033[42m<\/code><\/li>\n\n\n\n<li>Gelb: <code>\\033[43m<\/code><\/li>\n\n\n\n<li>Blau: <code>\\033[44m<\/code><\/li>\n\n\n\n<li>Magenta: <code>\\033[45m<\/code><\/li>\n\n\n\n<li>Cyan: <code>\\033[46m<\/code><\/li>\n\n\n\n<li>Wei\u00df: <code>\\033[47m<\/code><\/li>\n\n\n\n<li><strong>Textstil<\/strong>:<\/li>\n\n\n\n<li>Normal: <code>\\033[0m<\/code><\/li>\n\n\n\n<li>Fett: <code>\\033[1m<\/code><\/li>\n\n\n\n<li>Unterstrichen: <code>\\033[4m<\/code><\/li>\n\n\n\n<li>Blinkend: <code>\\033[5m<\/code><\/li>\n\n\n\n<li>Umgekehrt: <code>\\033[7m<\/code><\/li>\n<\/ul>\n\n\n\n<p>Diese Codes k\u00f6nnen kombiniert werden, indem sie mit einem Semikolon getrennt werden. Zum Beispiel erzeugt <code>\\033[1;31m<\/code> fettgedruckten roten Text.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verwendung von ANSI-Codes in Java<\/h3>\n\n\n\n<p>Um ANSI-Codes in Java zu verwenden, m\u00fcssen sie in Strings eingebettet werden, die an die Konsole ausgegeben werden. Hier sind einige Beispiele, wie dies in Java umgesetzt werden kann.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ANSIExample<\/span> <\/span>{\n\n    <span class=\"hljs-comment\">\/\/ ANSI escape codes<\/span>\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String RESET = <span class=\"hljs-string\">\"\\033&#91;0m\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String RED = <span class=\"hljs-string\">\"\\033&#91;31m\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String GREEN = <span class=\"hljs-string\">\"\\033&#91;32m\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String YELLOW = <span class=\"hljs-string\">\"\\033&#91;33m\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String BLUE = <span class=\"hljs-string\">\"\\033&#91;34m\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String MAGENTA = <span class=\"hljs-string\">\"\\033&#91;35m\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String CYAN = <span class=\"hljs-string\">\"\\033&#91;36m\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String WHITE = <span class=\"hljs-string\">\"\\033&#91;37m\"<\/span>;\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> void main(String&#91;] args) {\n        System.out.println(RED + <span class=\"hljs-string\">\"Dieser Text ist rot\"<\/span> + RESET);\n        System.out.println(GREEN + <span class=\"hljs-string\">\"Dieser Text ist gr\u00fcn\"<\/span> + RESET);\n        System.out.println(YELLOW + <span class=\"hljs-string\">\"Dieser Text ist gelb\"<\/span> + RESET);\n        System.out.println(BLUE + <span class=\"hljs-string\">\"Dieser Text ist blau\"<\/span> + RESET);\n        System.out.println(MAGENTA + <span class=\"hljs-string\">\"Dieser Text ist magenta\"<\/span> + RESET);\n        System.out.println(CYAN + <span class=\"hljs-string\">\"Dieser Text ist cyan\"<\/span> + RESET);\n        System.out.println(WHITE + <span class=\"hljs-string\">\"Dieser Text ist wei\u00df\"<\/span> + RESET);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Plattform\u00fcbergreifende Kompatibilit\u00e4t<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">MacOS\/Linux<\/h4>\n\n\n\n<p>Die meisten Terminals unter MacOS und Linux unterst\u00fctzen ANSI-Codes von Haus aus. Daher funktionieren die oben gezeigten Beispiele in der Regel ohne zus\u00e4tzliche Konfiguration.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Windows<\/h4>\n\n\n\n<p>Unter Windows gibt es eine Besonderheit: \u00c4ltere Versionen der Eingabeaufforderung (cmd.exe) unterst\u00fctzen ANSI-Codes nicht nativ. Dies kann jedoch durch den Einsatz modernerer Terminal-Emulatoren wie <code>Windows Terminal<\/code> oder durch Aktivieren der virtuellen Terminalverarbeitung in der Eingabeaufforderung gel\u00f6st werden.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Aktivieren der virtuellen Terminalverarbeitung in cmd.exe<\/h5>\n\n\n\n<p>Ab Windows 10 kann die virtuelle Terminalverarbeitung mit dem folgenden Befehl aktiviert werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> com.sun.jna.Library;\n<span class=\"hljs-keyword\">import<\/span> com.sun.jna.Native;\n<span class=\"hljs-keyword\">import<\/span> com.sun.jna.platform.win32.Kernel32;\n<span class=\"hljs-keyword\">import<\/span> com.sun.jna.platform.win32.WinDef.DWORD;\n<span class=\"hljs-keyword\">import<\/span> com.sun.jna.platform.win32.WinNT.HANDLE;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">EnableVirtualTerminal<\/span> <\/span>{\n\n    public interface Kernel32 extends Library {\n        Kernel32 INSTANCE = Native.load(<span class=\"hljs-string\">\"kernel32\"<\/span>, Kernel32.class);\n        HANDLE GetStdHandle(int nStdHandle);\n        boolean GetConsoleMode(HANDLE hConsoleHandle, DWORDByReference lpMode);\n        boolean SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode);\n    }\n\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        final int ENABLE_VIRTUAL_TERMINAL_PROCESSING = <span class=\"hljs-number\">0x0004<\/span>;\n        HANDLE hOut = Kernel32.INSTANCE.GetStdHandle(Kernel32.STD_OUTPUT_HANDLE);\n        DWORDByReference mode = <span class=\"hljs-keyword\">new<\/span> DWORDByReference(<span class=\"hljs-keyword\">new<\/span> DWORD(<span class=\"hljs-number\">0<\/span>));\n        <span class=\"hljs-keyword\">if<\/span> (Kernel32.INSTANCE.GetConsoleMode(hOut, mode)) {\n            Kernel32.INSTANCE.SetConsoleMode(hOut, <span class=\"hljs-keyword\">new<\/span> DWORD(mode.getValue() | ENABLE_VIRTUAL_TERMINAL_PROCESSING));\n        }\n\n        System.out.println(<span class=\"hljs-string\">\"\\033&#91;31mDieser Text ist rot\\033&#91;0m\"<\/span>);\n        System.out.println(<span class=\"hljs-string\">\"\\033&#91;32mDieser Text ist gr\u00fcn\\033&#91;0m\"<\/span>);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dieses Beispiel zeigt, wie man mithilfe von JNA (Java Native Access) die virtuelle Terminalverarbeitung in der Windows-Eingabeaufforderung aktiviert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nutzen und Einschr\u00e4nkungen<\/h3>\n\n\n\n<p>Die Verwendung von ANSI-Codes kann die Lesbarkeit und Struktur von Konsolenausgaben erheblich verbessern, insbesondere bei Programmen, die komplexe Ausgaben erzeugen oder Benutzereingaben erfordern. Es ist jedoch wichtig, die Plattformkompatibilit\u00e4t zu ber\u00fccksichtigen und sicherzustellen, dass die verwendeten Terminals ANSI-Codes unterst\u00fctzen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p>ANSI-Codes bieten eine einfache und effektive M\u00f6glichkeit, Konsolenausgaben in Java farbig zu gestalten. W\u00e4hrend sie auf MacOS und Linux weitgehend problemlos eingesetzt werden k\u00f6nnen, erfordern sie unter Windows m\u00f6glicherweise zus\u00e4tzliche Konfigurationen oder den Einsatz moderner Terminal-Emulatoren. Mit den richtigen Techniken k\u00f6nnen Entwickler ansprechende und benutzerfreundliche Konsolenanwendungen erstellen, die plattform\u00fcbergreifend funktionieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Verwendung von ANSI-Codes ist eine g\u00e4ngige Methode, um Konsolenausgaben farblich zu gestalten und somit die Lesbarkeit und Benutzererfahrung zu verbessern. ANSI-Codes sind spezielle Escape-Sequenzen, die von vielen Terminals unterst\u00fctzt werden, um Textattribute wie Farbe, Hintergrund und Textstil zu \u00e4ndern. Dieser Artikel beschreibt die Nutzung von ANSI-Codes zur Farbgestaltung von Konsolenausgaben unter MacOS\/Linux und Windows [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-446","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=446"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/446\/revisions"}],"predecessor-version":[{"id":447,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/446\/revisions\/447"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}