SWT MouseListener exited

njans

Top Contributor
Hallo Leute,
wie ihr sicherlich merkt, bin ich neu in dem Forum, daher meine erste Frage:

Ich habe ein JPanel, auf dem ich eine JCheckBox habe. Nun füge ich zu dem JPanel einen MouseListener hinzu, der nen boolean auf true setzt, wenn die maus auf das JPanel kommt udn ihn auf false setzt, wenn die Maus dieses Panel verlässt.
Nun stehe ich allerdings vor dem Problem, dass MouseExited feuert, wenn ich auf dem JPanel auf die JCheckBox komme.
Ich hatte bis jetzt keine gute Lösung gefunden, wie ich diese Problem lösen kann.
 
hmm danke für den Tipp 😉
Nur erscheint mir das etwas "viel" Arbeit dafür.
Ich sollte wohl genauer beschreiben was eigentlich der Sinn des Ganzen ist:
Ich habe mir einen Custom Border geschrieben, der von AbstractBorder erbt. Nun möchte ich, dass sich die Rahmenfarbe ändert, wenn ich mit der Maus über den Inhalt (die component und sub components) gehe.

Das bilde ich dann mit einem boolean ab, der bei paintComponent dann jeweils den Border anders zeichnet.
Jemand da ne passende Idee, die es mir erlaubt, die boolean je nach MausPosition so anzupassen? 🙂
 
Um es einfacher zu gestalten, hätte ich folgenden Vorschlag, 2Booleans zu verwenden und der JCheckBox (oder anderen Componenten) den selben MouseListener hinzuzufügen.

Java:
mouseEntered( MouseEvent e ) {
     if( e.getSource() == deinJPanel ) boolean1 = true;
     else boolean2 = true;
}
Und das selbe mit mouseExited.
Die Abfrage gewöhnlich mit if( boolean1 || boolean2 )

Das funktioniert aber nur, wenn zwischen 2 Komponenten (fals nicht nur die eine JCB da sein sollte) Abstand ist.
 
Ich habe es jetzt etwas anders gelöst:
1. In paintComponent() ruft der Border nun eine Hilfsmethode auf (siehe Code-snippet) um zu bestimmen, ob die Maus über der Component ist.
2. Zudem fungiert der Border auch noch als MouseListener, der jedes mal repaint aufruft, wenn mouseExited() oder mouseEntered() aufgerufen wird.

Damit funktioniert das nun einwandfrei.

Java:
/**
	 * Is used to determine if the mouse is currently over the component.
	 * 
	 * @return TRUE if the mouse is currently over the component.
	 */
	private boolean isInComponentBounds(Component comp, int width, int height)
	{
		// Get the global location of the mouse
		Point mousePoint =MouseInfo.getPointerInfo().getLocation();

		// Get global location and dimension of the component
		Rectangle rect = new Rectangle(comp.getLocationOnScreen(),
										new Dimension(width, height));
		
		// If the mouse is inside of the component
		if (rect.contains(mousePoint))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
 

Zurück
Oben