Java Eclipse/Window BuilderPro /JTabbed Pane

Frontmaker

Cadet 2nd Year
Registriert
Apr. 2011
Beiträge
20
Ich bin recht neu in Java und ihre Entwicklungsumgebungen (Eclipse) und GUI's(Window Builder Pro). Wir haben derzeit ein Projekt am laufen, welches wir bald abgeben müssen(Schule). Wir erstellen einen Rechner für physikalischen Formeln und ich bin derzeit mit dem Layout beschäftigt.

Als Oberfläche besitze ich einen JFrame. Dieser besitzt eine JMenübar und innerhalb der JMenübar wähle ich die einzellnen Taschenrechner über click_Ereignisse auf. Über dieses Ereignis soll dann ein Taberstellt werden, welche ich nach belieben aufrufen und auch wieder schließen kann. Das funktioniert auch soweit gut sofern ich ein MenüItem direkt in der Menübar benutze. Sofern ich allerdings, wie ich es eigendlich angedacht habe ein bis mehrere JMenüs benutze passiert gar nichts. Das macht mich ein wenig stutzig. Weiß vielleich zufällig jemand rat?

Danke schonmal in vorraus!
 
Jedes Item sollte auch den passenden Listener parat haben.

Beispiel mit dem Vaadin-Framework, sollte mit Swing eigentlich ähnlich sein:
Code:
	private void initListener() {
		ClickListener buttonListener = new ClickListener() {
			public void buttonClick(ClickEvent event) {
				if (event.getButton() == btnAbschicken) {
					
				} else if (event.getButton() == btnBack) {

				}
			}
		};
		btnBack.addListener(buttonListener);
		btnAbschicken.addListener(buttonListener);
	}
 
Code:
public Main{
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
		
mn1 = new JMenu("Menü1");
menuBar.add(mn1);
		
mn2 = new JMenu("Menü2");
mn1.add(mn2);

mntm1 = new JMenuItem("Name");
mntm1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Tabmethode("Name", new JPanel1());
}
});
mn2.add(mntm1);
}

private void Tabmethode(JPanel panel, String name ){
tabbedPane.addTab(name, panel);
tabbedPane.setTabComponentAt(index, new ButtonTabComponent(tabbedPane));
}

Ich habe die Bezeichner etwas abgeändert aber ich denke es sollte ja verständlich sein was damit gemeint ist.
 
Normalerweise werden werden Klicks auf ein MenuItem mit einem ActionListener behandelt.
Außerdem rufst du Tabmethode(String, JPanel) auf, deklarierst diese aber als Tabmethode(JPanel, String)??
 
Der Actionlistener wird ja mit addMouseListener(new MouseAdapter() {} hinzugefügt. So funktioniert das auch mit anderen Komponenten.

Die Methode Tabmethode ist einfach eine von mir erstellte Nethode zum erstellen eines Tabs. Du musst dir vorstellen, ich habe viele Menüitems und benutze dann einfach die Methode mit folgenden Übergabeparameter. JPanel ist die Basisklasse meiner eigenen Panels. Meine eigens erstellten Panels kann ich ja dann in die Basisklasse reininstanziieren (wenn ich das mal so ausdrücken darf) und übergebe diese dann.
 
Zuletzt bearbeitet:
ActionLister und MouseListener sind aber zwei verschiedene paar Schuhe. Ist das das Beispiel wo es nicht funktioniert? Wie sieht der funktionierende Code aus?

Bei deiner Methode Tabmethode hast du die Parameter vertauscht. Das dürfte so nicht compilieren.
 
Was Darlis sagen möchte ist:

Die Signatur deiner Methode "Tabmethode" ist mit den Argumenten (JPanel, String) definiert. Du rufst aber eine Methode "Tabmethode" mit der Signatur (String, JPanel) auf.

Das funktioniert so nicht. Du hast wohl einiges vor dem pasten geändert.

Bitte lade den original Code hoch!
 
Danke Keepers, das habe ich gemeint.
Btw. ich habe deinen Pseudocode mit einem ActionListener zum laufen gebracht. Mit einem MouseListener hat's nicht funktioniert.
 
Hmm okay. Ich habe wohl noch einiges zu lernen. Ich habe da gerade eine Internetseite gefunden, wo relativ gut dargestellt wird, wie man Contextmenüs benutzt. Ich versuche das erstmal. Falls das nicht klappt werde ich mich nochmal melden.;)

Ich bedanke mich schonmal für eure hilfe.
Ergänzung ()

Der Actionlistener war die Lösung. Vielen dank .

Es machte mich nur stuzig, weil die meisten Componenten (zumindest ist es bei mir so) mit dem Mouselistener funktionieren. Deswegen ging ich da immer nach Schema F vor.

Vielen Dank nochmal!
 
Zuletzt bearbeitet:
Du willst doch aber kein Event der Mouse in dem Sinne abfangen. (Das will ich zum Beispiel wenn ich auf einem Zeichenbrett mit der Maus male)

Was du willst ist einfach nur die Action auf dem Objekt erkennen, und in diesem Fall etwas tun.

by the way:

Du implementierst das ActionListener Objekt anonym und implementierst gleich das Interface mit anonym. In deiner anonymen Methode des Interfaces rufst du eine private Methode auf.

Genau so sollte das sein - das ist guter Stil!

Wollte ich nur mal anmerken für dich als Neuling.
 
Zurück
Oben