JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton?

Ich habe folgendes Problem:

Ich habe mehrere JButtons. Wenn ich über diese Fahre öffnet sich neben den Buttons per MouseListener ein JPopUpMenu das wieder verschwindet wenn ich den Button oder das Menu verlasse.

Nun ist es ja standartmäßig so, dass das Popup auch per Mausklick schließt. Leider führt dies aber dazu, dass ich den Button nur aktivieren kann wenn ich zweimal klicke, da beim ersten Klick lediglich das JPopUp Menu schließt aber nicht das Event auf dem Button ausgeführt wird. Kann man das irgendwie ändern?

MfG MasterChristain
 

HelgeW

Mitglied
Wenn ich Dich richtig verstanden habe, dann klickst Du einen Menüpunkt innerhalb des Popups an, richtig?
Wenn dem so ist, dann würde ich sowohl für den Button als auch für das Menu die selbe Action hinterlegen und somit würde in beiden Fällen das gleiche passieren.

Gruss Helge
 
Nein, das Popup öffnet wenn der Mauszeiger den Button betritt neben dem Mauszeiger. Wenn ich nun aber nicht ins Popup möchte sondern den Button normal drücken, dann muss ich dies zweimal tun da mit dem ersten Klick lediglich das PopuP schließt.

MfG MasterChristian
 
Ist einfach per MouseListener gelöst (bParamControl ist der Button):

bParamControl.addMouseListener(new MouseAdapter() {

public void mouseEntered(MouseEvent e) {
popParamControl.show(Main_FL.this, e.getXOnScreen() - Main_FL.this.getX() , e.getYOnScreen() - Main_FL.this.getY());
}

Es geht darum, dass beim Klick auf den Button eine TabbedPane mit mehreren Tabs aufgeht. Wahlweise soll man über das PopUp Menü direkt zu einem speziellen Tab springen können.

MfG MasterChristian
 

Michael...

Top Contributor
Bei mir (Windows XP) kann ich das nicht nachvollziehen. Beim ersten Klick wird das Popup ausgeblendet und der Button gedrückt.
Java:
	public static void main(final String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(0, 0, 300, 300);
		
		final JButton button = new JButton("PRESS");
		final JPopupMenu menu = new JPopupMenu();
		menu.add(new JMenuItem("SSS"));
		menu.add(new JMenuItem("SSS"));
		menu.add(new JMenuItem("SSS"));
		frame.add(button, BorderLayout.SOUTH);
		frame.setVisible(true);

		button.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				if (!menu.isVisible())
					menu.show(button, e.getX(), e.getY());
			}
		});
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				System.out.println("Button pressed");
			}
		});
	}
 

Andi_CH

Top Contributor
Leider sieht man den Mauszeiger auf den Sreenscots nicht.
Bei reinfahren in den Button kommt das gewünshte. Wenn ich reinklicke kommt es gleich wieder, einfach leicht verschoben.

Eigentlich hätte ich keine Chance den Button anzuklicken, wenn der nicht grösser als das PopUp wäre.

EDIT: Das stimmt so nicht, das ist der Fall wenn ich einen Eintrag anklicke, der genau über dem Button liegt. PopUp weg = MausEnter Event und Anzeige des Popups ...

Win7 64Bit aus Eclipse gestartet.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Bei reinfahren in den Button kommt das gewünshte. Wenn ich reinklicke kommt es gleich wieder, einfach leicht verschoben.
Das ist klar. Hier ist ja auch noch kein Algorithmus hinterlegt, der verhindert, dass das Popup wieder erscheint, wenn man einen Eintrag in diesem anklickt. Schließlich wird - sofern sich das Popup über dem Button befindet - wieder mouseEntered ausgelöst. U.a. aus diesem Grund frage ich ja die ganze Zeit nach der genauen Implementierung.
Hiermit ging es nur darum zu zeigen, dass wenn ich neben dem Popup auf den Button klicke das Popup verschwindet und der Button gleichzeitig gedrückt wird. Also keine zwei Klicks notwendig sind.
 

bERt0r

Top Contributor
Aber ist es nicht höchst unkonventionell ein Popupmenü anzuzeigen, nur weil man über einen Button fährt? Normalerweise öffnet man Popupmenüs per Rechtklick, im MouseEvent kannst du mit isPopupTrigger() abfragen ob du ein Popupmenü anzeigen sollst.
 
Mag sein das es unkonventionell ist, aber es soll ja eigendlich einen klick sparen und daher ohne rechtsklick erscheinen.
Warum es bei dir funktioniert verstehe ich leider nicht. Hab es mehrmals getestet und bei mir wird das Event nur ausgeführt, wenn das Popup geschlossen ist.

MfG MasterChristian
 
Solange das JPopUp Menu offen ist wird bei mir trotz Klick keinerlei Event ausgelöst, sondern nur das PopUp geschlossen. Hab das mal so getestet:

Java:
public void actionPerformed(ActionEvent e) {

		System.out.println("TEST EVENT");

Der Klick findet aber immer über dem Button statt, da ich es so eingestellt habe, dass das PopUp automatisch verschwindet, wenn die Maus den Button verlässt.
 

truesoul

Top Contributor
Also Michaels Beispiel funktioniert doch tadellos.
Zu deinem Problem kann ich nichts sagen, warum das so ist, wie es ist, da ich nur Code von Michael hier sehe. Also solltest du evtl. ein bissl Code zeigen :)
 
Java:
	public void addComponentsMouseListener() {
		
		//Param Control
		bParamControl.addMouseListener(new MouseAdapter() {
			
			public void mouseEntered(MouseEvent e) {				
					popParamControl.show(Main_FL.this, e.getXOnScreen() - Main_FL.this.getX() , e.getYOnScreen() - Main_FL.this.getY());	
			}
			
			public void mouseExited(MouseEvent e) {	
				popupMenuCloseCheckButtonExit(popParamControl, e);				
			}
		});
		popParamControl.addMouseListener(new MouseAdapter() {
			public void mouseExited(MouseEvent e) {
				popupMenuCloseCheckPopupExit(popParamControl, e);
			}
		});

Zur Erklärung: bParamControl ist der Button und popParamControl das JPopUpMenu. Main_FL ist ein Frame.

in der Funktion popupMenuCloseCheckButtonExit (Ok komischer Name) überprüfe ich ob sich der Mauszeiger beim verlassen des Buttons über dem PopUp befindet. Ist dies nicht der Fall wird das Popup auf Visible = false gesetzt.
Das gleiche macht die Funktion popupMenuCloseCheckPopupExit. Nur das Hier geprüft wird ob der Mauszeiger nach verlassen des Popups über dem Button ist. So kann ich mit der Maus zwischen Button und PopUp hin und herfahren ohne das das PopuP verschwindet. Verlasse ich aber den Button oder das PopuP ohne in die jeweils andere Componente zu fahren, schließt das Popup.

Java:
	public void popupMenuCloseCheckButtonExit(JPopupMenu popup, MouseEvent e)
	{
		if(popup.isShowing())
		{
			if((popup.getLocationOnScreen().x > e.getLocationOnScreen().x))
				popup.setVisible(false);
			else if((popup.getLocationOnScreen().x <= e.getLocationOnScreen().x
					&& popup.getLocationOnScreen().y > e.getLocationOnScreen().y))
				popup.setVisible(false);
		}
	}
	
	public void popupMenuCloseCheckPopupExit(JPopupMenu popup, MouseEvent e)
	{
		if(popup.isShowing())
		{
			if(e.getLocationOnScreen().x <= popup.getLocationOnScreen().x ||
					   e.getLocationOnScreen().x >= (popup.getLocationOnScreen().x + popup.getWidth()) ||
					   e.getLocationOnScreen().y <= popup.getLocationOnScreen().y ||
					   e.getLocationOnScreen().y >= popup.getLocationOnScreen().y + popup.getHeight())
			{					
				popup.setVisible(false);	
			}
		}
	}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Wie adde ich ein JPopUpMenu AWT, Swing, JavaFX & SWT 3
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
P Event Handling Listener beim öffnen von einem JPopupMenu AWT, Swing, JavaFX & SWT 3
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JPopupMenu visible AWT, Swing, JavaFX & SWT 4
S JPopupMenu schließen in SystemTray AWT, Swing, JavaFX & SWT 2
xehpuk Swing Listener für JPopupMenu AWT, Swing, JavaFX & SWT 3
hdi Workaround: TrayIcon & JPopupMenu AWT, Swing, JavaFX & SWT 3
K Swing Listener bei JPopupMenu AWT, Swing, JavaFX & SWT 9
S JPopupMenu oder JCombobox die JList oeffnet..? AWT, Swing, JavaFX & SWT 7
A Swing in JPopupMenu die JRadioButtonMenuItems durchlaufen AWT, Swing, JavaFX & SWT 3
T JmenuItems in JPopupMenu kontextabhängig deaktivieren AWT, Swing, JavaFX & SWT 2
S Swing JPopupMenu nicht schließen AWT, Swing, JavaFX & SWT 2
pinerski Probleme mit JPopupMenu und JMenuItem AWT, Swing, JavaFX & SWT 7
hdi Swing JPopupMenu: Größe AWT, Swing, JavaFX & SWT 4
B JPopupMenu, getParent Problem... AWT, Swing, JavaFX & SWT 2
Dragonfire width of JPopupMenu StyleBug AWT, Swing, JavaFX & SWT 3
M JPopupMenu - Ein vorhandenes Kontextmenü erweitern AWT, Swing, JavaFX & SWT 6
Iron Monkey JPopupMenu/JMenuItem Index für getSubElements()[] ermitteln AWT, Swing, JavaFX & SWT 8
X JPopupMenu Items aktualisieren sich nicht AWT, Swing, JavaFX & SWT 3
T JPopupMenu "schließen" AWT, Swing, JavaFX & SWT 7
M jPopupMenu AWT, Swing, JavaFX & SWT 2
M jPopupMenu - Problem bei der Positionierung AWT, Swing, JavaFX & SWT 3
N JPopupMenu - ausgewähltes Element zurückgeben AWT, Swing, JavaFX & SWT 2
P JPopupMenu scrollen AWT, Swing, JavaFX & SWT 2
A JPopupMenu: Nach oben aufpoppen AWT, Swing, JavaFX & SWT 9
S Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 3
T JPopupMenu wird bei Rechtsklick angezeigt! AWT, Swing, JavaFX & SWT 3
Firefork JPopupMenu unter einem Schalter darstellen AWT, Swing, JavaFX & SWT 2
K Netbeans GUI Builder (Matisse) und erstellen von JPopupMenu AWT, Swing, JavaFX & SWT 1
I In JPopupMenu scrollen AWT, Swing, JavaFX & SWT 4
M JPopupMenu per linker Maustaste öffnen AWT, Swing, JavaFX & SWT 9
V Beliebige Komponenten in einem JPopupMenu? AWT, Swing, JavaFX & SWT 3
F Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 3
C JPopUpMenu in einem JTree ist lahm AWT, Swing, JavaFX & SWT 14
V JPopupMenu Problem und Tipp zu mouse/key AWT, Swing, JavaFX & SWT 3
F JPopupMenu und AbstractAction AWT, Swing, JavaFX & SWT 2
N Problem mit JPopupMenu und alwaysOnTop AWT, Swing, JavaFX & SWT 4
G Schließen von JPopupMenu AWT, Swing, JavaFX & SWT 14
G Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 30
R Hässlicher Punkt bei JPopupMenu AWT, Swing, JavaFX & SWT 12
S JPopupMenu - Kontrolliert beenden AWT, Swing, JavaFX & SWT 3
C Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 6
T java.awt.IllegalComponentStateException bei JPopupMenu AWT, Swing, JavaFX & SWT 6
G Problem mit JPopupMenu und Menüauswahl AWT, Swing, JavaFX & SWT 4
R JPopupMenu,JScrollPane + repaint AWT, Swing, JavaFX & SWT 8
D Probleme bei der Positionierung von JPopupMenu AWT, Swing, JavaFX & SWT 2
J "Problem" mit JPopupMenu AWT, Swing, JavaFX & SWT 7
G JPopupMenu in JTable AWT, Swing, JavaFX & SWT 4
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
H Swing Auf Klick auf Menü-Eintrag reagieren AWT, Swing, JavaFX & SWT 0
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
A JavaFX Nur ein Klick Button AWT, Swing, JavaFX & SWT 3
J Fensterinhalt bei Klick auf Menüitem wechseln AWT, Swing, JavaFX & SWT 1
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
A Zufallsgenerator starten bei Klick auf Radiobutton AWT, Swing, JavaFX & SWT 3
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
W Bei Button-klick neuen button in array hinzufügen AWT, Swing, JavaFX & SWT 7
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
P Swing JTable keine Markierung nach Button klick AWT, Swing, JavaFX & SWT 0
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
T JXTreeTable mit Klick auf TreeNode erweitern AWT, Swing, JavaFX & SWT 12
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
T Bei Klick Code ausführen AWT, Swing, JavaFX & SWT 17
S Gif beim Klick nicht unterbrechen AWT, Swing, JavaFX & SWT 3
S Ausschluss bei Klick auf GUI Element AWT, Swing, JavaFX & SWT 6
Z Bei Klick auf JButton soll ein anderer JButton erscheinen AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
D Bei Klick zeichnen AWT, Swing, JavaFX & SWT 13
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
H Bilder auf Buttons per Klick tauschen ( Puzzle ) AWT, Swing, JavaFX & SWT 8
T Puzzle Klick tausch AWT, Swing, JavaFX & SWT 3
A Swing Herausfinden ob bei JTree Klick auf "+"/"-" anahnd x,y AWT, Swing, JavaFX & SWT 2
C jComboBox in jTable ohne Klick öffnen AWT, Swing, JavaFX & SWT 4
S JMenuBar nach 1. Klick deselectieren AWT, Swing, JavaFX & SWT 6
T Demo klick gui erstellen und fenster verlinken AWT, Swing, JavaFX & SWT 5
S JDesktopPane bei Button-Klick anzeigen geht nicht AWT, Swing, JavaFX & SWT 5
multiholle Button bei Klick entfernen AWT, Swing, JavaFX & SWT 3
W Klick in JTextfield AWT, Swing, JavaFX & SWT 6
M animiertes Bild nach Klick auf Button AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
M JList von Beginn an sortiert nach Spalte ohne Klick? AWT, Swing, JavaFX & SWT 2
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben