ToolTip mit Touchscreen

barsiq

Mitglied
Hallo,

ich experementiere grade an einer Lösung, mit der ToolTips auf einem Touchscreen-Monitor (PC) benutzt werden können.
Das Problem ist in der Methode mousePressed(MouseEvent e) des ToolTipManagers - diese schließt das ToolTip, wird jedoch stets aufgerufen alsbald man da was mit Finger anvisiert. Die eigentliche Action wird erst beim Loslassen ausgelöst, so gesehen wäre es kein Widerspruch.

Forgender Code entfernt den Original-TooltipManager und setzt einen neuen, mit TT im TS.

Code:
		MouseInputListener milLabel = new MouseInputAdapter(){
			@Override
			public void mouseEntered(MouseEvent event) {
				System.err.println("mouseEntered");
				ToolTipManager.sharedInstance().mouseEntered(event);
			}
			@Override
			public void mouseExited(MouseEvent event) {
				System.err.println("mouseExited");
				ToolTipManager.sharedInstance().mouseExited(event);
			}
			@Override
			public void mousePressed(MouseEvent event) {
				System.err.println("mousePressed");
//				ToolTipManager.sharedInstance().mouseExited(event);
			}
			
			@Override
			public void mouseDragged(MouseEvent event) {
				System.err.println("mouseDragged");
				ToolTipManager.sharedInstance().mouseDragged(event);
			}
			@Override
			public void mouseMoved(MouseEvent event) {
				System.err.println("mouseMoved");
				ToolTipManager.sharedInstance().mouseMoved(event);
			}
//			@Override
//			public void mouseReleased(MouseEvent event) {
//				System.err.println("mouseReleased");
//				ToolTipManager.sharedInstance().mousePressed(event);
//			}
		};
		for(MouseListener l : label.getMouseListeners()){
			System.err.println("MouseListener:\t" + l.getClass().getCanonicalName());
			label.removeMouseListener(l);
		}
		for(MouseMotionListener l : label.getMouseMotionListeners()){
			System.err.println("MouseMotionListener:\t" + l.getClass().getCanonicalName());
			label.removeMouseMotionListener(l);
		}
		label.addMouseListener(milLabel);
		label.addMouseMotionListener(milLabel);

Diese Lösung funktioniert, muß allerdings für jede Komponente erfolgen (alte löschen, neue setzen).

Mich würde eine Möglichkeit interessieren diesen Tausch zentral und an nur einer Stelle für alle Komponenten der Applikation zu realisieren.
Oder es gibt auch andere Wege zur Problemlösung - die wären auch mehr als willkommen.
 
1. Touchscreen-support für Java ist noch nicht umgesetzt, d.h. es wird immer eine Maus imitiert.

2. Nutze einen (transparenten) JComponent, der über allem Inhalt liegt und modifiziere ihn so, dass er die MouseEvents unter bestimmten Umständen nicht weiter gibt
2.a) Nutze Java 7 und JLayer. Lege ein JLayer über den gesamten Inhalt des Fensters
2.b) Modifiziere das JLayeredPane deines RootContainers
 

Neue Beiträge

Zurück