Ich mache ein paar Arbeit machen eine Java-App kompatibel mit alternativen Eingabegeräten. Unglücklicherweise hat das fragliche Gerät eine Java-API, die gerade jetzt in den Alpha-Phasen ist, also ist es ziemlich schlecht. Was ich tun muss, ist im Wesentlichen eine Ersatzstruktur für den Versand von MouseEvents einzurichten. Weiß jemand, ob es einen Weg in Swing gibt, eine Bildschirmkoordinate zu nehmen und herauszufinden, welche Swing-Komponente an diesem Bildschirmpunkt oben angezeigt wird?Identifizieren der Swing-Komponente an einer bestimmten Bildschirmkoordinate? (Und manuell MouseEvents zu versenden)
10
A
Antwort
15
In AWT Container, dies nennen ...
findComponentAt(int x, int y)
Locates the visible child component that contains the specified position
dh Wenn es in einem Glasspane ist ...
public static Component findComponentUnderGlassPaneAt(Point p, Component top) {
Component c = null;
if (top.isShowing()) {
if (top instanceof RootPaneContainer)
c =
((RootPaneContainer) top).getLayeredPane().findComponentAt(
SwingUtilities.convertPoint(top, p, ((RootPaneContainer) top).getLayeredPane()));
else
c = ((Container) top).findComponentAt(p);
}
return c;
}
Ihre Frage Lesen, könnte dies auch Ihnen behilflich sein. ..
Wenn Sie die Kontrolle ausüben möchten, verwenden Sie diese ... Java.awt.Robot-Klasse wird verwendet, um die Steuerung von Maus und Tastatur zu übernehmen. Sobald Sie das Steuerelement erhalten, können Sie jede Art von Operation im Zusammenhang mit Maus und Tastatur über Ihren Java-Code. Diese Klasse wird allgemein für die Testautomatisierung verwendet.
3
Eine Alternative (kann weitere Optimierungen erforderlich):
public static Component findComponentUnderMouse() {
Window window = findWindow();
Point location = MouseInfo.getPointerInfo().getLocation();
SwingUtilities.convertPointFromScreen(location, window);
return SwingUtilities.getDeepestComponentAt(window, location.x, location.y);
}
private static Window findWindow() {
for (Window window : Window.getWindows()) {
if (window.getMousePosition(true) != null)
return window;
}
return null;
}
Dank! Ich dachte, dass es einen API-Aufruf geben muss, ich schaute einfach nicht weit genug nach oben auf den Ahnenbaum. Und von der Robot-Klasse zu hören ist ein RIESIGER Bonus; Ich hatte keine Ahnung, dass so etwas existiert, und es besteht eine gute Chance, dass du mir die Tage der Arbeit erspart hast! – DVA
@DVA Danke für den Kommentar, das gute Feedback und der Upvote sind das, was die Leute dazu bringt, Fragen zu beantworten. Froh, dass ich Helfen kann :) –