2010-04-28 16 views
10

मैं वैकल्पिक इनपुट उपकरणों के साथ जावा ऐप को संगत बनाने में कुछ काम कर रहा हूं। दुर्भाग्यवश, प्रश्न वाले डिवाइस में जावा एपीआई है जो अभी अल्फा चरणों में मुश्किल से है, इसलिए यह बहुत खराब है। मुझे क्या करना है अनिवार्य रूप से MouseEvents के प्रेषण के लिए एक प्रतिस्थापन संरचना स्थापित करना है। क्या किसी को पता है कि स्क्रीन समन्वय लेने के लिए स्विंग में कोई तरीका है और पता लगाएं कि उस स्क्रीन बिंदु पर शीर्ष पर स्विंग घटक किस प्रकार प्रदर्शित होता है?एक विशेष स्क्रीन समन्वय पर स्विंग घटक की पहचान? (और मैन्युअल रूप से MouseEvents प्रेषण)

उत्तर

15

AWT कंटेनर में, इस फोन ...

findComponentAt(int x, int y) 
      Locates the visible child component that contains the specified position 

यानी यदि यह एक GlassPane में है ...

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; 
    } 

अपने प्रश्न पढ़ना, यह भी आप के लिए सहायक हो सकता है। ..

यदि आप नियंत्रण का उपयोग करना चाहते हैं तो इसका उपयोग करें ... Java.awt.Robot क्लास का उपयोग माउस और कीबोर्ड पर नियंत्रण लेने के लिए किया जाता है। एक बार जब आप नियंत्रण प्राप्त कर लेंगे, तो आप अपने जावा कोड के माध्यम से माउस और कीबोर्ड से संबंधित किसी भी प्रकार का ऑपरेशन कर सकते हैं। इस वर्ग का प्रयोग आमतौर पर परीक्षण स्वचालन के लिए किया जाता है।

+0

धन्यवाद! मैंने सोचा कि कुछ एपीआई कॉल होना चाहिए, मैं सिर्फ पूर्वजों के पेड़ को काफी दूर नहीं देख रहा था। और रोबोट वर्ग के बारे में सुनना एक बड़ा बोनस है; मुझे ऐसा कुछ नहीं पता था जैसे अस्तित्व में था, और एक अच्छा मौका है कि आपने मुझे काम के दिन बचाया! – DVA

+0

@ डीवीए टिप्पणी के लिए धन्यवाद, अच्छी प्रतिक्रिया और अपवित्र लोगों को प्रश्नों का उत्तर देने में मदद करता है। मदद करने में खुशी :) –

3

एक वैकल्पिक (आगे सुधार करने की आवश्यकता):

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; 
} 
संबंधित मुद्दे