importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclass KNOPFFENSTER extendsJFrameimplementsActionListener{JButton buttonHallo;JButton buttonServus;publicKNOPFFENSTER(){// Fenster soll sichtbar seinsetVisible(true);// Standard-Layout setzen (einfach so lassen...)getContentPane().setLayout(newFlowLayout());// Button erzeugen. Im Konstruktor steht der Name, der im Knopf erscheinen soll
buttonHallo =newJButton("Hallo");// Button wird dem Fenster hinzugefügtadd(buttonHallo);// Jetzt wird dem Knopf gesagt, dass bei einem Knopfdruck die actionPerformed Methode // aufgerufen werden soll. Sieht etwas verwegen aus, einfach so übernehmen.
buttonHallo.addActionListener(this);// Das ganze nochmal für einen zweiten Knopf
buttonServus =newJButton("Servus");add(buttonServus);
buttonServus.addActionListener(this);// Muss am Ende stehen, damit die eingetragenen Sachen sichtbar werdenpack();}// Wenn irgendeiner der Knöpfe gedrückt wird, dann wird diese Methode// automatisch aufgerufen. Eine Art von auslösender AktionpublicvoidactionPerformed(ActionEvent event){System.out.print("Irgendein Knopf wurde gedrückt...");// Wir müssen nun herausfinden, welcher Knopf gedrückt wurde...// Handelt es sich bei der Quelle der Aktion um das Objekt buttonHallo? Dann gib "Hallo" aus.if(event.getSource()== buttonHallo){System.out.println("Hallo");}if(event.getSource()== buttonServus){System.out.println("Servus");}}}
dank dir schon mal dafür,
aber geht das auch ohne Swing?
das kommt erst danach und darf ich noch nicht
(wenns nicht anders geht hat mein Lehrer pech gehabt ueh:
:bahnhof: ähm und wo ist denn deine main Klasse?
so ist das nicht ausführbar!
Und soweit ich das sehe wird auch da nur ein Fenster (mit 2 Buttons, die nichts können) geöffnet.
Ich möchte ja mit einem Button ein anderes Fenster öffnen.
importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclass KNOPFFENSTER extendsJFrameimplementsActionListener{JButton buttonHallo;JButton buttonServus;publicKNOPFFENSTER(){// Fenster soll sichtbar seinsetVisible(true);// Standard-Layout setzen (einfach so lassen...)getContentPane().setLayout(newFlowLayout());// Button erzeugen. Im Konstruktor steht der Name, der im Knopf erscheinen soll
buttonHallo =newJButton("Hallo");// Button wird dem Fenster hinzugefügtadd(buttonHallo);// Jetzt wird dem Knopf gesagt, dass bei einem Knopfdruck die actionPerformed Methode // aufgerufen werden soll. Sieht etwas verwegen aus, einfach so übernehmen.
buttonHallo.addActionListener(this);// Das ganze nochmal für einen zweiten Knopf
buttonServus =newJButton("Servus");add(buttonServus);
buttonServus.addActionListener(this);// Muss am Ende stehen, damit die eingetragenen Sachen sichtbar werdenpack();}// Wenn irgendeiner der Knöpfe gedrückt wird, dann wird diese Methode// automatisch aufgerufen. Eine Art von auslösender AktionpublicvoidactionPerformed(ActionEvent event){System.out.print("Irgendein Knopf wurde gedrückt...");// Wir müssen nun herausfinden, welcher Knopf gedrückt wurde...// Handelt es sich bei der Quelle der Aktion um das Objekt buttonHallo? Dann gib "Hallo" aus.if(event.getSource()== buttonHallo){System.out.println("Hallo");}if(event.getSource()== buttonServus){System.out.println("Servus");}}publicstaticvoidmain(String args[]){newKNOPFFENSTER();}}
publicvoidactionPerformed(ActionEvent event){System.out.print("Irgendein Knopf wurde gedrückt...");// Wir müssen nun herausfinden, welcher Knopf gedrückt wurde...// Handelt es sich bei der Quelle der Aktion um das Objekt buttonHallo? Dann gib "Hallo" aus.if(event.getSource()== buttonHallo){System.out.println("Hallo");}if(event.getSource()== buttonServus){System.out.println("Servus");}}
dann musst du halt einfach, statt
System.out.println("...")
was anderes ausführen
war ja nur ein Bespiel
wenn ne neue klasse ausgeführt werden soll
schaut eben so aus
Java:
publicvoidactionPerformed(ActionEvent event){// Handelt es sich bei der Quelle der Aktion um das Objekt buttonHallo? Dann gib "Hallo" aus.if(event.getSource()== buttonHallo){newFenster();}if(event.getSource()== buttonServus){newFenster2();}}
so und noch ein Problem:
wenn ich das neue Fenster wieder schließe gehen beide Fenster wieder zu.
Ist es auch möglich nur das neue Fenster zu schließen und das alte offen zu lassen?
Das FlowLayout richtet die Komponenten so lange in einer Zeile aus, bis der Platz erschöpft ist. Wenn kein Platz mehr ist, werden die Komponenten, die nicht mehr in die Zeile passen, in die nächste Zeile verschoben.
Es richtet sich dabei nach der voreingestellten Größe einer Komponente. Und die Größe (PreferredSize) kann man im FlowLayout (anders als bspw. im GridLayout) wirksam setzen.
Hier mal ein Beispiel mit deinem Code: (Zeile 30)
Java:
importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassKnopfFensterextendsJFrameimplementsActionListener{privateJButton buttonHallo;privateJButton buttonServus;publicKnopfFenster(){super("KnopfFenster");// Standard-Layout setzen (einfach so lassen...)getContentPane().setLayout(newFlowLayout());// Standardaktion beim Klicken auf den Fenster-Button "Schließen"setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Button erzeugen. Im Konstruktor steht der Name, der im Knopf erscheinen soll
buttonHallo =newJButton("Hallo");// Button wird dem Fenster hinzugefügtadd(buttonHallo);// Jetzt wird dem Knopf gesagt, dass bei einem Knopfdruck die actionPerformed Methode// aufgerufen werden soll. Sieht etwas verwegen aus, einfach so übernehmen.
buttonHallo.addActionListener(this);// Das ganze nochmal für einen zweiten Knopf
buttonServus =newJButton("Servus");
buttonServus.setPreferredSize(newDimension(80,40));//Standardgröße für den Button setzenadd(buttonServus);
buttonServus.addActionListener(this);// Muss am Ende stehen, damit die eingetragenen Sachen sichtbar werdenpack();//Fenster auf dem Bildschirm zentrierensetLocationRelativeTo(null);// Fenster soll sichtbar sein (immer als letzte Anweisung!)setVisible(true);}// Wenn irgendeiner der Knöpfe gedrückt wird, dann wird diese Methode// automatisch aufgerufen. Eine Art von auslösender AktionpublicvoidactionPerformed(ActionEvent event){System.out.print("Irgendein Knopf wurde gedrückt...");// Wir müssen nun herausfinden, welcher Knopf gedrückt wurde...// Handelt es sich bei der Quelle der Aktion um das Objekt buttonHallo? Dann gib "Hallo" aus.if(event.getSource()== buttonHallo){System.out.println("Hallo");}elseif(event.getSource()== buttonServus){System.out.println("Servus");}}publicstaticvoidmain(String args[]){newKnopfFenster();}}
Habe nebenbei auch noch ein paar Sachen bereinigt.
Sicher, nur wird das Ergebnis u.U. etwas anders aussehen. Das GridLayout ignoriert gänzlich die Angaben von Standardgrößen. Es verteilt die Komponenten lediglich mit gleicher Größe im Layout.
Über das BorderLayout haben wir einen kleinen FAQ-Beitrag: http://www.java-forum.org/java-faq-beitraege/109662-borderlayout.html