Erstes arbeiten mit GUI

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo Leute, kann mir viell jemand sagen oder zeigen weshalb mein Programm nicht läuft?
Ich soll ein kleines Frame mit Hilfe von ActionListener gestalten mit den Menüpunkten Datei & Info.
Dabei hat Datei die Unterpunkte Neu & Beenden.
Jedoch schimpft mein Eclipse Programm und unterstreicht schon in der ersten Zeile den Klassennamen & weiter später in der letzten Methode in der Klammer den Typ 'ActioEvent'.
Hmmmm, kann jemand den Fehler erkennen?!

Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import javax.swing.*;

public class UsingGUIElements extends JFrame implements ActionListener {

	/**
	 * @param args
	 */

	private JMenu menueFile1, menueFile2;
	private JMenuItem menueItemNew, menueItemClose;
	
	public static void main(String[] args) {
		new UsingGUIElements();
	}
	
	public UsingGUIElements(){
		super("GUI Elements");
		
		JMenuBar menueBar = new JMenuBar();
		
		menueFile1 = new JMenu("Datei");
		menueItemNew = new JMenu("Neu");
		menueItemClose = new JMenu("Beenden");
		
		menueFile1.add(menueItemNew);
		menueFile2.add(menueItemClose);
		
		
		menueFile2 = new JMenu("Info");
		
		menueBar.add(menueFile1);
		menueBar.add(menueFile2);
		
		this.setJMenuBar(menueBar);
		
		menueItemNew.addActionListener(this);
		menueItemClose.addActionListener(this);
		
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBackground(Color.LIGHT_GRAY);
		this.setSize(300,300);
		this.setResizable(true);
		this.setVisible(true);
		/**Konstruktor mit dem Attributen des Fensters*/
	}
	
	public void actionPerformed(ActionEvent actionEvent){
		if(actionEvent.getSource() == menueFile1){
			System.out.println("Sie haben den Menuepunkt Datei ausgewaehlt.");
		}
		else if(actionEvent.getSource() == menueFile2){
		System.out.println("Sie haben den Menuepunkt Info ausgewaehlt.");
		}
	}
}
 
B

Beni

Gast
Dir fehlt doch ein Import für ActionEvent. Mach mal "ctrl + shift + o" um "java.awt.event.ActionEvent" zu importieren.
 

Bjoern2

Mitglied
Wie oben gesagt.
Und dass Eclipse dir den Klassennamen bei JFrame's und JPanel's gelb unterstreicht ist normal.
Hier will Eclipse noch folgendes:
Code:
private static final long serialVersionUID = [i]EinWert[/i];
Ist aber nicht unbedingt notwendig.
 

JPKI

Top Contributor
Ja, ich weiss. Eclipse ist eigentlich super, doch mich nervt auch die fast schon erzwungene serivalVersionUID wenn irgendwas Serializable implementiert...
 

Wildcard

Top Contributor
JPKI hat gesagt.:
Ja, ich weiss. Eclipse ist eigentlich super, doch mich nervt auch die fast schon erzwungene serivalVersionUID wenn irgendwas Serializable implementiert...
Ist ja nicht so das man die Warnung nicht ausschalten könnte :wink:
 

merlin2

Top Contributor
Und was ist, wenn man
Code:
@SuppressWarnings("serial")
schreibt (Zweiter Vorschlag von eclipse)? Welche Warnungen werden dadurch noch unterdrückt?
 
G

Gast

Gast
Ok,
das rot unterstrichene ist weg.
Jedoch gibt er mir eine Exception an:
"Exception in thread "main" java.lang.NullPointerException
at UsingGUIElements.<init>(UsingGUIElements.java:29)
at UsingGUIElements.main(UsingGUIElements.java:16)
"
Was passt denn da nicht?!
Kann ich mit der Zeile 29 nicht im Hauptmenü einen zweiten Punkt erstellen?
 

Ellie

Aktives Mitglied
Du musst Zeile 29 mit der nachfolgenden vertauschen. Bei dir wird ein Menüeintrag an ein noch nicht erzeugtes Menü angehängt.
 
G

Gast

Gast
Hmm, wenn ich die Zeile 29 mit der anderen vertausche tritt die gleiche Exception auf nur mit der veränderten Zeile...
Also grob stimmt mein Programm, ja?
 

babuschka

Top Contributor
Du möchtest doch die Menüpunkte Neu und Beenden im Menü Datei haben. Du fügst aber Beenden Menü Info zu, was du noch gar nicht erzeugt hast zu diesem Zeitpunkt.

Wenn ich richtig liege, musst du statt:
Code:
menueFile2.add(menueItemClose);

einfach

Code:
menueFile1.add(menueItemClose);

schreiben. Wenn du die Variablen sprechender wählst wie menueFileDatei statt 1 kommt es nicht so leicht zu Verwechslungen.
 
G

Gast

Gast
Kann mir denn jemand sagen, weshalb die Ausgabe nicht klappt, wenn ich einen Menüpunkt anklicke???
Denn leider gibt mir die Konsole nichts aus...
 

Ellie

Aktives Mitglied
Weil deine actionPerformed()-Methode Ereignisse von Menüs behandelt, die ActionListener aber Menüeinträgen zugewiesen sind. :)

Übrigens:
1. Von ihren Namen ausgehend scheint es ein Fehler zu sein, dass du menueItemNew und menueItemClose als JMenus erzeugst, da sollte wohl stehen:

Code:
menueItemNew = new JMenuItem("Neu");
menueItemClose = new JMenuItem("Beenden");

2. Bitte editiere den oben geposteten Code nach jedem Fehlerfund, so werden wir nicht durch Fehler abgelenkt, die schon angesprochen wurden.

3. ActionPerformed() sollte Ereignisse von Menüeinträgen, nicht von Menüs abfangen. Ich habe gerade die ActionListener anders gesetzt und es so ausprobiert, wie es bei dir in der Methode steht – die GUI reagierte gar nicht auf Anklicken von Menüs. Man muss also Anklicken von JMenuItems behandeln.
 
G

Gast

Gast
Dankeschön!
Jetzt ist es auch so, wie ich es haben sollte.
Zuvor waren bei den Untermenüs noch solche Pfeile (als ob man in weitere Untermenüpunkte gehen wollen würde).
Auch die Ausgabe klappt nach der Änderung.
Danke nochmal.
 
G

Gast

Gast
Viell noch eine kleine Frage:
Was müsste ich denn schreiben, dass er mir ausgibt, dass ich den Menüpunkt Info angeklickt habe?!
Also, das funktioniert nicht:
else if(actionEvent.getSource() == menueFile2){
System.out.println("Sie haben den Menuepunkt Info ausgewaehlt.");
}

Wie denn?
 

Ellie

Aktives Mitglied
Was passiert denn? Wahrscheinlich ist's aber ein Flüchtigkeitsfehler, z.B. dass der ActionListener nicht zugewiesen wurde oder die Quelle gar nicht "menueFile2" heißt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
D 2 GUI-Fenster. 2.Fenster wird nicht aufgebaut, wenn erstes beschäftigt ist. AWT, Swing, JavaFX & SWT 4
M erstes Frame wartet auf die Auswertung eines zweiten AWT, Swing, JavaFX & SWT 8
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
C Mein erstes kleines Swing-Projekt - Probleme AWT, Swing, JavaFX & SWT 8
G Erstes "komplexeres" Prog AWT/GUI AWT, Swing, JavaFX & SWT 10
Q Mein erstes GUI - Probleme AWT, Swing, JavaFX & SWT 2
B Erstes Zeichen in einem String toUpperCase ??? AWT, Swing, JavaFX & SWT 4
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
K Event Handling Mit ActionPerformed und java.io arbeiten AWT, Swing, JavaFX & SWT 3
M Koordinatensystem für Projektorientiertes Arbeiten AWT, Swing, JavaFX & SWT 2
M Arbeiten mit actionPerformed(ActionEvent) oder Alternative AWT, Swing, JavaFX & SWT 7
Y Arbeiten mit JTable AWT, Swing, JavaFX & SWT 3
B Arbeiten mit Prozessbar und alles drum herum AWT, Swing, JavaFX & SWT 3
T Keylistener hört auf zu arbeiten AWT, Swing, JavaFX & SWT 9
I Arbeiten mit mehreren Fenstern AWT, Swing, JavaFX & SWT 4
D Arbeiten mit 2 TextFeldern gleichzeitig AWT, Swing, JavaFX & SWT 6
T Arbeiten mit Swing AWT, Swing, JavaFX & SWT 6
M Mit mehreren Panels arbeiten AWT, Swing, JavaFX & SWT 2
O mit komponenten arbeiten AWT, Swing, JavaFX & SWT 2
M 2 gleichberechtigte Fenster sollen miteinander arbeiten AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben