Goddie Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 (bearbeitet) Huhu, ich hab Ausbildung zum FIAE grade angefangen (am Dienstag) und sitz morgen den ganzen tag alleine rum. Nun hab ich als Aufgabe bekommen, mal ein kleines Fenster in Java zu machen, in dem Hello World steht und das 3 Buttons hat. Die Buttons sollen keinerlei Funktion oder so haben, nur da sein. Da ich wie gesagt grade erst angefangen habe und meinen Ausbilder noch gar net kenne, soll ich das nur machen damit ich mit Java in Berührung komme (habe voher nur mit PHP / HTML gewerkelt) Ich darf bzw. soll mir sogar jegliche Hilfe holen, es geht nicht darum das ich es kann, sondern das ich mit Java generell in berührung komme. Nun hab ich mich ein bischen eingelesen. Allerdings sind das ganze nur Kommandozeilen ausgaben, a bissl mit Variablen spielen etc. Wie erstelle ich den eine "leere" Java applikation? Also rein ein "Windows Fenster" ? Irgendwie hab ich das noch net geblickt Und da ich mir ja explizit Hilfe holen/ mit Helfen soll frag ich mal hier nach Ich will nu auf keinen Fall einfach nur nen bissl Java Code hier reinkopiert haben, mir währs lieber wenn mir jemand "erklärt" wie es geht Wie gesagt, reine beschäftigungstherapie, da ich morgen alleine bin und mein Ausbilder diese Woche noch im Urlaub ist Danke und mfg Sven Edith sagt Windows darf nicht in doof geändert werden Nachtrag: Ich muss ja das Abstract WindowKit importieren, richtig? Bearbeitet 29. Oktober 2008 von Goddie Zitieren
Dragon8 Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 Dann leite ich dich mal gleich weiter: Galileo Computing :: Java ist auch eine Insel – 15 Grafische Oberflächen mit Swing Trail: Creating a GUI with JFC/Swing (The Javaâ„¢ Tutorials) Auf den beiden Seiten wird erklärt wie man eine grafische Oberfläche mit Java programmiert. Die erste dürfte etwas leichter zu verstehen sein, dafür beschäftigt sich die zweite ebenfalls mit tieferen Details, ist aber auch auf englisch. Zitieren
speedi Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 zusätzlich zu den Links von Dragon8 auch noch interessant: javabuch Zuerst solltests du dir mal die groben Grundlagen der Objektorientierung anschauen. Was ist eine Klasse? Was ist ein Objekt? Was sind Methoden? Was sind Übergabeparameter und Rückgabewerte? Danach wird für dich die Klasse JFrame von Bedeutung sein. JFrame ist dann nämlich genau das was du brauchst => ein Fenstern. Und zum Schluss JButton. Wichtig hierfür: wie setzt man GUI-Objekte auf andere Objekte? Da du mit ziemlicher Sicherheit beim einfügen von 3 Buttons ein paar "unlogische Sachen" erleben wirst: schau dir an was ein Layout (-Manager) ist. Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 Eingelesen hab ich mich in Java schon ein wenig, ist halt schon komplizierter und anders wie PHP+HTML Ich hab jetzt hier mal nen stück quelltext, in den Comments steht drin was ich meine was das grad ist, wüsste gern ob ich das so richtig begriffen habe. import javax.swing.JFrame; // hier wird erstmal die Bibiliothek importiert public class Uebung // hier leitet man eine neue Klasse ein und gibt ihr nen Namen { public static void main( String[] args ) // das hier ist die Main Methode { // (was da nun im einzelnen public, static, void etc. machen, kA find auch nirgends eine erklärung ) JFrame f = new JFrame( "Das Fenster zur Welt" ); // Ist das hier nun schon ein Objekt? Für mich sieht das so aus wie : der Variablentyp JFrame mit namen F = inhalt f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); //die einzelnen Funktionen/anweisungen für "f", also mein Objekt/Variable f.setSize( 300, 200 ); f.setVisible( true ); } }[/PHP] Wenn ich da irgendwo Mist stehen hab, bitte verbessern mir gehts darum ob ich den Grundaufbau gerafft hab Danke und mfg Goddie Zitieren
Dragon8 Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 import javax.swing.JFrame; // hier wird erstmal die Bibiliothek importiert Stimmt. public class Uebung // hier leitet man eine neue Klasse ein und gibt ihr nen Namen Stimmt auch schonmal public static void main( String[] args ) // das hier ist die Main Methode { // (was da nun im einzelnen public, static, void etc. machen, kA find auch nirgends eine erklärung ) Das ist die Main-Methode, richtig. public = öffentliche Methode, also nicht nur innerhalb der Klasse sichtbar static = statische Methode, sie kann auch ohne ein Objekt der Klasse Uebung aufgerufen werden void = Sie hat keinen Rückgabewert JFrame f = new JFrame( "Das Fenster zur Welt" ); // Ist das hier nun schon ein Objekt? Ja, in dieser Zeile wird schon das Objekt erzeugt und eine Referenz auf dieses Objekt in f gespeichert. f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); //die einzelnen Funktionen/anweisungen für "f", also mein Objekt/Variable f.setSize( 300, 200 ); f.setVisible( true ); Kann man so sagen, ja. Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 public = öffentliche Methode, also nicht nur innerhalb der Klasse sichtbar Versteh ich net ganz Heisst das ich kann auch aus anderen klassen heraus auf die Methode zugreifen? z.B ne neue File, neue Class. static = statische Methode, sie kann auch ohne ein Objekt der Klasse Uebung aufgerufen werden Bedeutet grob->Programm/Anwendung/what ever startet auch ohne Inhalt? void = Sie hat keinen Rückgabewert Rückgabewerte könnten zB eingaben durch den Benutzer sein? Oder ist damit etwas internenes gemeint, was durch irgendwelche Anweisungen ensteht? Sry für die doofen Fragen, aber ich wills halt gern verstehen und net nur auswendig lernen Zitieren
Dragon8 Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 Heisst das ich kann auch aus anderen klassen heraus auf die Methode zugreifen? z.B ne neue File, neue Class. Das heißt es sogesehen, ja. Wenn eine Methode einer Klasse als public gekennzeichnet ist, kannst du sie aus allen anderen Klassen, die Zugriff auf die erste Klasse haben, aufrufen. Bei einer normalen Methode muss dazu aber ein Objekt vorhanden sein,... Bedeutet grob->Programm/Anwendung/what ever startet auch ohne Inhalt? ...bei Methoden die aber mit static gekennzeichnet sind, kannst du die Methode auch aufrufen ohne dass du ein Objekt der Klasse erzeugt hast. Diese Methoden unterliegen dann natürlich gewissen Einschränkungen. Rückgabewerte könnten zB eingaben durch den Benutzer sein? Oder ist damit etwas internenes gemeint, was durch irgendwelche Anweisungen ensteht? Rückgabewerte sind so gesehen Ergebnisse die, die Funktion (Methode) zurückliefert. Ob das nun einfache Werte sind, ob der Aufruf erfolgreich war, oder komplexe Ergebnisse einer Berechnung oder was auch immer, ist dem Entwickler überlassen. Ich würde dir aber trotzdem dringend empfehlen in eins der beiden hier schon geposteten Bücher zu schauen und mir nochmal alles genau durchzulesen und vll nen paar Übungen dazu zu machen. Weil die Sachen die ich eben erklärt habe sind Grundlagen ohne die es sich nicht wirklich lohnt weiter zu machen. Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 (bearbeitet) Hmm irgendwie funzt das net, ich bekomm keine Fehlermeldung beim Compilieren, aber mir wird kein Button angezeigt import javax.swing.*; public class Uebung { public static void main( String[] args ) { JFrame f = new JFrame( "Aufgabe Claudia" ); f.setSize( 300, 300 ); f.setVisible( true ); f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); JButton button1 = new JButton( "Ende" ); f.add( button1 ); } }[/PHP] Edith: Buch hab ich nebenher auf ich les ja darin, aber es kommen halt immer wieder Fragen auf, deren Antworten nicht direkt aus dem Buch für mich ersichtlich sind Bearbeitet 30. Oktober 2008 von Goddie Zitieren
speedi Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 (bearbeitet) du bist auf den richtigen Weg. Dein Butten nimmt jetzt aber das ganze Fester ein. Das StandardLayout (welches die größe der einzelnen Komponenten an die Größe des Eigentümers anpasst) von JFrame ist BorderLayout. Du kannst das Layout mit frame.setLayout() auch ändern (z.B. FlowLayout (allees nebeneinander), GridLayout(Tabellenform) etc...). Wenn du setLayout(null) machst, kannst du dich um die Größe deines Buttons selbst kümmern mit button.setBounds(x-position, y-position, breite, höhe. setVisible(true); solltest du ganz am Schluss machen, sonnst fügst du den Button hinzu nachdem das Frame schon sichtbar ist. Der Button ist dann zwar da, wird aber (noch) nicht gezeichnet. Wenn du dein Frame kurz schleißt und neu öffnest siehst du ihn. Eine andere möglichkeit wäre ein frame.repaint(); nach dem Einfügen. Bearbeitet 30. Oktober 2008 von speedi Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 Super, danke funktioniert Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 Für einfache Textanzeigen nutzt man Label, right? Nich das ich mir hier was falsches angewöhne nur weils zufällig funktioniert Zitieren
speedi Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 Ein Label (oder JLabel) wäre eine Variante. Du könntest aber auch die paint-Methode vom Frame überschreiben und mit graphics.drawString was hinschreiben. Für TextEingaben eignet sich ein TextField oder ein JTextField ganz gut. Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 (bearbeitet) So, ich wollt nu mal übers Ziel meiner eigentlichen Aufgabe hinaus und versuch grade dem "Ende" Button eine Fuktion zu geben. Allerdings lässt sich das ganze nicht compilieren import javax.swing.*; import java.awt.*; public class Uebung { public static void main( String[] args ) { JFrame f = new JFrame( "Aufgabe Claudia" ); f.setLayout(null); f.setSize( 300, 300 ); f.setVisible( true ); f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); JLabel test = new JLabel ("Hallo Claudia"); f.add (test); test.setBounds(15,15,100,100); JButton button1 = new JButton( "Ok" ); f.add( button1 ); button1.setBounds(15, 220, 70, 30); JButton button2 = new JButton( "Weiter" ); f.add( button2 ); button2.setBounds(100, 220, 75, 30); JButton button3 = new JButton( "Ende" ); f.add( button3 ); button3.setBounds(190, 220, 70, 30); button3.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { System.exit( 0 ); } } ); } }[/PHP] Wo ist der Fehler? Edith: Habs fehlte noch: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; Ich dachte wenn ich java.awt.* importiere, hätte ich alles Bearbeitet 30. Oktober 2008 von Goddie Zitieren
speedi Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 Nein leider nicht. Der ActionListener liegt in java.awt.event also importiere noch zusätzlich java.awt.event.* Welche Entwicklungsumgebung nutzt du derzeit? Schau dir mal eclipse an! Da brauchst da braucht nur noch den Cursor hinter den Namen der unbekannten Klasse zu setzen und Strg+Leertaste zu drücken und dir werden schon entsprechende Vorschläge für Imports angezeigt. Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 meine Entwicklungsumgebung nennt sich PSPadEditor + Eingabeaufforderung Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 Eclipse aufm Server gefunden und Installiert Ich hab nur folgendes, ich möcht das wenn ich auf den Button drück, das er mir in meinem Fensterchen "Test" schreibt So wie ich es habe, schreibt er mir das in der Konsole oO import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Uebung { public int test =0; public static void main( String[] args ) { JFrame f = new JFrame( "Aufgabe Claudia" ); f.setLayout(null); f.setSize( 300, 300 ); f.setVisible( true ); f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); JLabel test = new JLabel ("Hallo Claudia"); f.add (test); test.setBounds(15,15,100,100); JButton button1 = new JButton( "Ok" ); f.add( button1 ); button1.setBounds(15, 220, 70, 30); JButton button2 = new JButton( "Weiter" ); f.add( button2 ); button2.setBounds(100, 220, 75, 30); JButton button3 = new JButton( "Ende" ); f.add( button3 ); button3.setBounds(190, 220, 70, 30); button3.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { System.exit( 0 ); } } ); button2.addActionListener ( new ActionListener() { public void actionPerformed (ActionEvent e) { System.out.println("Test"); } }); } }[/PHP] Zitieren
speedi Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 Kannst dir bei gelegenheit mal Eclipse anschauen. Das ist wesentlich besser. Allerdings ist die Eingabeaufforderung und ein simpler Editor zum lernen auch nicht verkehrt. Eclipse nimmt dir nämlich schon echt krass viel ab. Zitieren
Goddie Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 Wie erstell ich eigentlich ne Ausführbare Datei? Also etwas das ich net immer in der Eingabeaufforderung starten muss? Und was muss ich hierran button2.addActionListener ( new ActionListener() { public void actionPerformed (ActionEvent e) { System.out.println("Test"); } }); ändern, damit mir die Ausgabe nicht in der Eingabeaufforderung sondern im GUI angezeigt wird? Zitieren
speedi Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 (bearbeitet) Eine Ausfürhbare Datei kannst du mit eclipse über einen rechtsklick auf Projekt=>Export=>Java=>JAR file erstellen. Eine JAR-Datei lässt sich wenn java korrekt installiert ist mit einem Doppelklick starten. Du kannst aber mit Programmen wie z.B. JSmooth die JAR-Datei auch noch einmal zusätzlich in eine Exe packen. Java Runtime brauchst du jedoch zum ausführen in jedem Fall immer noch. Um etwas in einem TextField oder einem JLabel auszugeben besitzen diese Klassen eine setText(...)-Methode. Zuerst musst du dir mal eine Ensprechende Text-Komponente auf deine GUI leben und dann kannst du im ActionListener die setText-Methode aufrufen. Das wird in deinem Fall jedoch nicht funktionieren, da du entweder dann dein TextField auf final setzen musst (d.h. du kannst zur Laufzeit deiner textfield-Variablen nicht einfach ein neues/anderes TextField zuweisen) oder du erstellst eine Klasse die von JFrame erbt, welche dann das TextField als Klassenvariable hat. Das schaut dann in etwa so aus: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class MyFrame extends JFrame{//Die Klasse erbt von JFrame und ist damit selbst auch ein JFrame private JButton button1, button2, button3; public MyFrame() { setLayout(null); setSize( 300, 300 ); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); JLabel test = new JLabel ("Hallo Claudia"); add (test); test.setBounds(15,15,100,100); button1 = new JButton( "Ok" ); add( button1 ); button1.setBounds(15, 220, 70, 30); button2 = new JButton( "Weiter" ); add( button2 ); button2.setBounds(100, 220, 75, 30); button3 = new JButton( "Ende" ); add( button3 ); button3.setBounds(190, 220, 70, 30); button3.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { System.exit( 0 ); } } ); button2.addActionListener ( new ActionListener() { public void actionPerformed (ActionEvent e) { System.out.println("Test"); } }); setVisible( true ); } public static void main(String[] args) { new MyFrame(); } } Die textKomponente ist hier jetzt noch nicht drin. Aber deine Buttons sind schonmal Klassenvariablen auf die du in jeder nicht-static-Methode der Klasse zugreifen kannst. Bearbeitet 30. Oktober 2008 von speedi Zitieren
cybermaxtc Geschrieben 8. November 2008 Geschrieben 8. November 2008 Bin auch ein totaler Nob und hab grad erst als FIAE angefangen. Das mit den Fenstern hab ich soweit gecheckt. Nun meine Frage wie kann ich die Java-Kaffetasse aus der linken Seite der Menü-, Titelleiste verbannen und durch ein eigenes Icon ersetzen? Hab auch schon gegoogelt aber mich interessieren die Kaffepreise in Östereich grad überhaupt nicht *sfg* :confused: Danke schon mal vorab Edit: Ich benutze Eclipse Zitieren
nekokaburi Geschrieben 10. November 2008 Geschrieben 10. November 2008 Bin auch ein totaler Nob und hab grad erst als FIAE angefangen. Das mit den Fenstern hab ich soweit gecheckt. Nun meine Frage wie kann ich die Java-Kaffetasse aus der linken Seite der Menü-, Titelleiste verbannen und durch ein eigenes Icon ersetzen? Hab auch schon gegoogelt aber mich interessieren die Kaffepreise in Östereich grad überhaupt nicht *sfg* :confused: Danke schon mal vorab Edit: Ich benutze Eclipse Wonach suchst du denn bei google? ^^ Versuch mal "java icon JFrame" das dürfte normal gute ergebnisse bringen.. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.