{"id":266,"date":"2018-08-03T15:00:44","date_gmt":"2018-08-03T13:00:44","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=266"},"modified":"2020-05-11T19:29:40","modified_gmt":"2020-05-11T17:29:40","slug":"ein-fenster","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/08\/03\/ein-fenster\/","title":{"rendered":"Konsolenprogramme II: Ein Fenster"},"content":{"rendered":"<p>Jetzt steigen wir auch schon genauer in die objektorientierte Programmierung ein und wollen unser Programm dabei so ausbauen das &#8222;HalloWelt!&#8220; nicht mehr in der Konsole, sondern in einem Fenster erscheint.<\/p>\n<p>Wir erg\u00e4nzen unseren Quellcode folgenderma\u00dfen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">package start;\r\n\r\n\/\/ importiere Klassen f\u00fcr Fenster (JFrame), Container (JPanel) und Text (JLabel)\r\nimport javax.swing.JFrame;\r\nimport javax.swing.JPanel;\r\nimport javax.swing.JLabel;\r\n\r\npublic class HalloWelt extends JFrame {  \/\/ extends JFrame: erweitert die Klasse um ein Fenster\r\n\t\r\n public static void main(String[] args) { \/\/\u00a0Einstiegsmethode\r\n\r\n  new HalloWelt();\r\n }\r\n\r\n public HalloWelt() {  \/\/ Konstruktor\r\n  this.setDefaultCloseOperation( EXIT_ON_CLOSE ); \/\/definiert Schlie\u00dfaktion\r\n  this.setBounds( 0, 0, 900, 500 ); \/\/\u00a0legt\u00a0Fenstergr\u00f6\u00dfe\u00a0fest\r\n  this.setLocationRelativeTo( null );\u00a0\/\/\u00a0legt\u00a0Relativposition\u00a0fest\r\n  this.setAlwaysOnTop( true );\u00a0\/\/\u00a0Fenster\u00a0in\u00a0den\u00a0Vordergrund\r\n  this.setVisible( true );\u00a0\/\/\u00a0macht\u00a0das\u00a0Fenster\u00a0sichtbar \r\n  schreibe();   \/\/ ruft die schreibe-Methode auf\r\n }\r\n\t  \r\npublic void schreibe() {   \/\/ unsere Schreibmethode\r\n \r\n\/\/\u00a0erstellt\u00a0einen\u00a0unsichtbaren\u00a0Container\u00a0namens\u00a0panel \r\n JPanel panel = new JPanel(); \r\n \r\n this.add(panel); \u00a0\/\/\u00a0f\u00fcgt\u00a0dieses\u00a0Panel\u00a0dem\u00a0Fenster\u00a0hinzu\r\n \r\n\u00a0\/\/\u00a0erstellt\u00a0das\u00a0Label\u00a0\r\n JLabel label = new JLabel (\"Hallo Welt!\", JLabel.CENTER);\r\n \r\n panel.add(label); \/\/\u00a0f\u00fcgt\u00a0das\u00a0Label\u00a0dem\u00a0Panel-Container\u00a0hinzu\r\n \r\n\/\/\u00a0Gibt\u00a0zus\u00e4tzlich\u00a0HalloWelt\u00a0in\u00a0der\u00a0Console\u00a0aus.\r\n System.out.println( \"HalloWelt!\" );\u00a0\r\n }\r\n\r\n}\r\n\r\n<\/pre>\n<p>Scheint ein wenig viel zu sein, aber lasst uns das Zeile f\u00fcr Zeile durchgehen.<br \/>\n<code>package start;<\/code>\u00a0Gibt an mit welchem package wir arbeiten. In diesem Fall haben wir das Package start selbst angelegt (Wir erinnern uns, ein package ist ein spezieller Ordner der Java-Dateien enth\u00e4lt.<br \/>\nZeile 4-6 <code>import..<\/code>\u00a0Hier werden Klassen aus der Klassenbibliothek importiert. Diese &#8222;Bauteilbeschreibungen&#8220; ben\u00f6tigen wir um Fenster (JFrame), unsichtbare Container (JPanel) und Labels (f\u00fcr Text und Beschriftungen) in unserem Programm zu benutzen. F\u00fcr diese grafischen Elemente nutzen wir Klassen des Pakets <em>Swing<\/em>. Swing wird am h\u00e4ufigsten eingesetzt um grafische Oberfl\u00e4chen in Java zu erstellen. Es sorgt daf\u00fcr das diese Oberfl\u00e4chen auf allen Betriebssystemen gleich aussehen da die Elemente von Java selbst gerendert werden. Man spricht von einer <em>leichtgewichtigen<\/em> Oberfl\u00e4che. Das Gegenteil w\u00e4re das Paket <em>AWT<\/em>, das eine schwergewichtige Oberfl\u00e4che darstellt, die vom Betriebssystem des jeweiligen Computers gerendert wird.<\/p>\n<p>Zeile 8\u00a0<code>..HalloWelt extends JFrame<\/code>\u00a0<em>extends\u00a0<\/em>bedeutet das die Klasse um die nachfolgende Klasse erweitert wird. Unsere Klasse HalloWelt wird dadurch eine <em>Unterklasse<\/em> der Klasse JFrame.<br \/>\nIn Java werden Klassen hierachisch verwaltet. Die Klasse von der etwas <em>geerbt\u00a0<\/em>wird heisst\u00a0<em>Oberklasse<\/em> (auch <em>Eltern<\/em>&#8211; oder <em>Superklasse<\/em> genannt) in diesem Fall ist die Oberklasse von HalloWelt also JFrame.<\/p>\n<p style=\"text-align: left;\">Zeile 10\u00a0<code>public static void main..<\/code>\u00a0die Einstiegsmethode. Jedes Programm braucht einen Beginn oder Einstieg, dort wo das Programm starten soll. In unserem Fall ist es das erste Fenster das ge\u00f6ffnet wird. Also unsere zum JFrame erweiterte HalloWelt Klasse.<br \/>\n<code>public<\/code>\u00a0bedeutet, wir wir schon wir schon wissen, das diese Methode \u00f6ffentlich ist.<\/p>\n<p>Der Modifikator\u00a0<code>static<\/code>\u00a0kann bei Variablen und Methoden eingesetzt werden. Bei Methoden bedeutet dies, das jene nur \u00fcber den Klassennamen, nicht aber \u00fcber ein daraus erstelltes Objekt abgefragt werden k\u00f6nnen.<br \/>\nBeispiel: Angenommen die Klasse heisst Auto und ein daraus erstelltes Objekt Mercedes. Der Aufruf einer Objektmethode w\u00fcrde normalerweise so erfolgen: <code>mercedes.objektmethode<\/code>. Wenn die Methode aber <code>static<\/code> ist kann sie nur \u00fcber die Klasse d.h. <code>Auto.objektmethode<\/code> aufgerufen werden.<br \/>\nIst eine Variable <code>static<\/code> bedeutet dies, das bei einer \u00c4nderung jener Variable, alle Objekte die aus der Klasse abgeleitet wurden den neuen Wert enthalten.<br \/>\nF\u00fcr den Anfang merken wir uns einfach das die Einstiegsmethode immer <code>static<\/code> ist.<\/p>\n<p><code>void<\/code>\u00a0bedeutet das diese Methode keinen R\u00fcckgabewert hat. Damit besch\u00e4ftigen wir uns im n\u00e4chsten Kapitel auch gleich mehr.<\/p>\n<p><code>main<\/code>\u00a0weist darauf hin das dies die sogenannte <em>Einstiegsmethode<\/em> ist. Jedes Programm hat eine solche Methode wo das Programm beginnt.<\/p>\n<p><code>(String[] args)<\/code>\u00a0eine Liste von Variablen vom Typ String, die theoretisch zu Beginn des Programmaufrufs mit \u00fcbergeben werden kann. <code>args<\/code>\u00a0ist der Variablenname, <code>String<\/code> der Typ. Die eckigen Klammern <code>[]<\/code> zeigen auf, das es sich um eine Liste von Daten handelt. In dieser Variablen sind sozusagen mehrere Variablen enthalten, auf die man z. B. mit args[0], args[1], args[2] etc. zugreifen k\u00f6nnte.<\/p>\n<p>Zeile 11 <code>new<\/code>\u00a0ruft den <em>Konstruktor <\/em>oder die<em> Konstruktormethode\u00a0<\/em>auf. Wie wir bereits aus den Grundlagen der Objektorientierung wissen, hat jede Klasse eine solche Methode. Der Code in dieser Methode wird ausgef\u00fchrt sobald aus einer Klasse mit <code>new<\/code> ein neues Objekt erstellt wird.<\/p>\n<p>Zeile 14 <code>public HalloWelt()<\/code>\u00a0die ist die Konstruktormethode.<\/p>\n<p>Da unsere Klasse HalloWelt um JFrame erweitert wurde und somit auch ein Fenster ist, k\u00f6nnen wir auf alle Methoden von JFrame zugreifen. Unsere Klasse &#8222;erbt&#8220; diese von JFrame. Auf <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/javax\/swing\/JFrame.html\">dieser Seite<\/a> unter &#8222;Method Summary&#8220; k\u00f6nnen wir alle Methoden nachlesen. In den nachfolgenden Zeilen benutzen wir einige solcher Methoden. Wobei sich <em>this <\/em>auf das Objekt bezieht das gerade erstellt wird, also HalloWelt.<\/p>\n<p>Zeile 17\u00a0<code>this.setDefaultCloseOperation( EXIT_ON_CLOSE );<\/code>\u00a0legt fest was was passieren soll wenn das Fenster geschlossen wird. In diesem Fall m\u00f6chten wir das es einfach sofort geschlossen wird.<\/p>\n<p>Zeile 19\u00a0<code>this.setBounds(0,0,900,500);<\/code>\u00a0legt die Gr\u00f6\u00dfe des Fensters in Pixel fest (X-Position, Y-Position, Breite, H\u00f6he).<\/p>\n<p>Zeile 21\u00a0<code><span class=\"kw1\">this<\/span><span class=\"\">.<\/span><span class=\"kw1\">setLocationRelativeTo<\/span><span class=\"br0\">(<\/span><span class=\"\"> null <\/span><span class=\"br0\">)<\/span><span class=\"\">;<\/span><\/code>\u00a0legt die Relativposition fest. Null bedeutet das es zentriert dargestellt wird. Man k\u00f6nnte aber auch ein anderes Objekt\/Fenster festlegen von dem die Position abh\u00e4ngig ist.<\/p>\n<p>Zeile 23\u00a0<code>this.setAlwaysOnTop(true);<\/code>\u00a0setzt das Fenster in den Vordergrund, also vor alle evtl. vorhandenen anderen Fenster.<\/p>\n<p>Zeile 25\u00a0<code><span class=\"kw1\">this<\/span><span class=\"\">.<\/span><span class=\"kw1\">setVisible<\/span><span class=\"br0\">(<\/span><span class=\"\"> true <\/span><span class=\"br0\">)<\/span><span class=\"\">;<\/span><\/code> Macht das Fenster sichtbar.<\/p>\n<p>Zeile 27 <code>schreibe();<\/code> ruft die schreibe Methode auf.<\/p>\n<p>Zeile 30 <code>public void schreibe()<\/code>\u00a0die Schreibmethode.<\/p>\n<p>Zeile 32\u00a0<code><span class=\"\">JPanel panel = <\/span><span class=\"kw1\">new<\/span> <span class=\"kw1\">JPanel<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"\">;<\/span><\/code>\u00a0erstellt ein neues JPanel, dies ist ein Container der benutzt werden kann um andere Container oder Objekte zu ordnen.<\/p>\n<p>Zeile 34\u00a0<code><span class=\"kw1\">this<\/span><span class=\"\">.<\/span><span class=\"me0\">add<\/span><span class=\"br0\">(<\/span><span class=\"\">panel<\/span><span class=\"br0\">);<\/span><\/code><span class=\"\"> f\u00fcgt das erstellte Panel dem Fenster hinzu.<\/span><\/p>\n<p>Zeile 36\u00a0<code><span class=\"\">JLabel label = <\/span><span class=\"kw1\">new<\/span> <span class=\"kw1\">JLabel<\/span> <span class=\"br0\">(<\/span><span class=\"st1\">\"Hallo Welt!\"<\/span><span class=\"\">, JLabel.<\/span><span class=\"me0\">CENTER<\/span><span class=\"br0\">)<\/span><span class=\"\">; <\/span><\/code>\u00a0Es wird ein JLabel mit Namen label erstellt. Dies ist eine Beschriftung die &#8222;Hallo Welt!&#8220; zentriert (durch Jlabel.CENTER) in dem Fenster ausgegeben wird.<\/p>\n<p>Zeile 38 <code>panel.add(label);<\/code> f\u00fcgt das Label dem panel hinzu.<\/p>\n<p>Zeile 41\u00a0<code><span class=\"kw4\">System<\/span><span class=\"\">.<\/span><span class=\"me0\">out<\/span><span class=\"\">.<\/span><span class=\"me0\">println<\/span><span class=\"br0\">(<\/span> <span class=\"st1\">\"HalloWelt!\"<\/span> <span class=\"br0\">)<\/span><span class=\"\">;<\/span><\/code>\u00a0gibt HalloWelt! zus\u00e4tzlich in der Konsole aus.<\/p>\n<p>Starten wir nun das Programm in der Konsole, sollte sich ein Fenster \u00f6ffnen und darin &#8222;HalloWelt!&#8220; ausgegeben werden. Wir k\u00f6nnten nun das Programm so ver\u00e4ndern das wir gleich beim Programmaufruf ein Parameter \u00fcbergeben das dann im Fenster erscheint. Also wir z.B. <code>java HalloWelt Blablabla<\/code> eingeben und im Fenster &#8222;Blablabla&#8220; erscheint. Eine M\u00f6glichkeit ist es den Wert des \u00fcbergebenen Anfagsparameters <em>durchzuschleifen<\/em>. D.h. wir \u00fcbergeben den Wert bis in das Fenster hinein. Hierzu m\u00fcssen wir nur folgendes anpassen:<\/p>\n<p>Zeile 12:\u00a0 <code>new HalloWelt( args[0] );<\/code>\u00a0Hier wird das erste Feld im Array <em>args<\/em> dem Konstruktor\u00a0 von HalloWelt \u00fcbergeben<br \/>\nZeile 15:\u00a0 <code>public HalloWelt(String text) {<\/code>\u00a0Dem Konstruktor wird hier gesagt das er eine Variable vom Typ String erwartet und ihr den Namen text geben soll.<br \/>\nZeile 21:\u00a0<code><span class=\"kw1\">schreibe<\/span><span class=\"br0\">(text<\/span><span class=\"br0\">)<\/span><span class=\"\">;<\/span><\/code>\u00a0Der Methode schreibe wird der String text \u00fcbergeben<br \/>\nZeile 24:\u00a0<code><span class=\"kw3\">public<\/span> <span class=\"kw3\">void<\/span> <span class=\"kw1\">schreibe<\/span><span class=\"br0\">(String txt<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span> <\/code><br \/>\nZeile 32:\u00a0<code><span class=\"\">JLabel label = <\/span><span class=\"kw1\">new<\/span> <span class=\"kw1\">JLabel<\/span> <span class=\"br0\">(<\/span><span class=\"st1\">txt<\/span><span class=\"\">, JLabel.<\/span><span class=\"me0\">CENTER<\/span><span class=\"br0\">)<\/span><span class=\"\">;<\/span><\/code><\/p>\n<p>Nun \u00f6ffnet sich das Fenster mit dem Text den wir am Programmstart mitgegeben haben.<br \/>\nNat\u00fcrlich gibt es jetzt eine Fehlermeldung falls wir kein Parameter anh\u00e4ngen. Wir k\u00f6nnten das Programm noch weiter ausbauen. Aber zun\u00e4chst wollen wir uns das Programmieren etwas erleichtern.<br \/>\nWie wir sicherlich gemerkt haben ist es etwas umst\u00e4ndlich mithilfe der Konsole zu programmieren. Deshalb wollen wir jetzt Eclipse installieren. Eclipse ist eine sogenannte IDE (Integrated Developer Enviroment) eine integrierte Entwicklungsumgebung oder einfach ausgedr\u00fcckt: Ein extrem aufgepumpter Texteditor mit dem Programmieren mehr Spass macht.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jetzt steigen wir auch schon genauer in die objektorientierte Programmierung ein und wollen unser Programm dabei so ausbauen das &#8222;HalloWelt!&#8220; nicht mehr in der Konsole, sondern in einem Fenster erscheint. Wir erg\u00e4nzen unseren Quellcode folgenderma\u00dfen: package start; \/\/ importiere Klassen f\u00fcr Fenster (JFrame), Container (JPanel) und Text (JLabel) import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; public [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/266"}],"collection":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/comments?post=266"}],"version-history":[{"count":21,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/266\/revisions"}],"predecessor-version":[{"id":823,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/266\/revisions\/823"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}