2014-06-12 7 views
5

एफएक्स में, माउस एवेन्ट्स अक्षम नोड्स को प्रेषित नहीं किए जाते हैं, अंत में व्यवहार का प्रदर्शन करने वाला एक त्वरित उदाहरण है।माउसएवेंट को अक्षम नोड्स को प्रेषित करने की अनुमति कैसे दें?

मेरे जैसे स्विंगर के लिए, यह थोड़ा आश्चर्यजनक है: मेरी भूमि में, घटनाएं वितरित की जाती हैं और यह तय करने के लिए लक्ष्य (ui-प्रतिनिधि) का कार्य है कि यह आयोजन संभाला जाना चाहिए या नहीं।

/** 
* Finds a top-most child node that intersects the given ray. 
* 
* The result argument is used for storing the picking result. 
*/ 
@Deprecated 
public final void impl_pickNode(PickRay pickRay, PickResultChooser result) { 

    // In some conditions we can omit picking this node or subgraph 
    if (!isVisible() || isDisable() || isMouseTransparent()) { 
     return; 
    } 

जो लगता है हिट दौरान के नाम से जाना: असल में हाल ही में एक के द्वारा इस ओर इशारा किया गया था - - पूरी तरह से वैध, IMO use-case of showing a tooltip over a disabled component

तकनीकी तौर पर, प्रेषण नोड के impl तरीकों में से एक में काट किया जा रहा है पहचान प्रक्रिया। यदि ऐसा है, तो यह झुकाव के बिना बहुत अधिक संभावना के बिना आंतों में वास्तव में गहरा होगा।

सवाल: मेरे कोड के साथ

  • कुछ भी गलत (आसानी से कुछ स्पष्ट ;-)
  • ऊपर वास्तव में अन्तर्निहित कारण है खो सकते हैं?
  • प्रेषण को मजबूर करने के लिए कोई कॉन्फ़िगर करने योग्य विकल्प है? यदि हां, तो कैसे करें?
  • व्यवहार का नमूना कहां है? ट्यूटोरियल्स/एपीआई दस्तावेज़ के आसपास देखा लेकिन कुछ भी नहीं मिला।

कोड उदाहरण:

package fx.control; 

import javafx.application.Application; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.Pane; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

/** 
* @author Jeanette Winzenburg, Berlin 
*/ 
public class MouseEventDisabled extends Application { 

    private Parent getContent() { 

     Pane parent = new Pane(); 
     Rectangle r = new Rectangle(100, 100, 200, 200); 
     r.addEventHandler(MouseEvent.ANY, event -> System.out.println(event));   
     CheckBox button = new CheckBox("rectangle disabled"); 
     r.disableProperty().bind(button.selectedProperty()); 
     parent.getChildren().addAll(r, button); 
     return parent; 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Parent root = getContent(); 
     Scene scene = new Scene(root); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(); 
    } 
} 

उत्तर

4

public final ReadOnlyBooleanProperty disabledProperty

बताता है कि क्या है या नहीं इस नोड अक्षम है। यदि निष्क्रिय दृश्य दृश्य में स्वयं या किसी पूर्वजों में से एक पर अक्षम किया गया है तो एक नोड अक्षम हो जाएगा। एक विकलांग नोड को उपयोगकर्ता को अक्षम राज्य को इंगित करने के लिए खुद को अलग-अलग प्रस्तुत करना चाहिए। इस तरह के अक्षम प्रतिपादन नोड के कार्यान्वयन पर निर्भर है। Javafx.scene.shape में निहित आकार वर्ग डिफ़ॉल्ट रूप से इस तरह के प्रतिपादन को लागू नहीं करते हैं, इसलिए इनपुट को संभालने के लिए आकारों का उपयोग करने वाले अनुप्रयोगों को उपयुक्त अक्षम प्रतिपादन को लागू करना आवश्यक है। Javafx.scene.control में परिभाषित उपयोगकर्ता-इंटरफ़ेस नियंत्रण अक्षम-संवेदनशील प्रतिपादन को लागू करेंगे, हालांकि।

A disabled Node does not receive mouse or key events.

डिफ़ॉल्ट मूल्य: झूठी देखें इसके अलावा: isDisabled(), setDisabled (बुलियन)

+0

प्रश्न के लिए +1, कठिन करने के लिए एपीआई में तरीकों ओवरराइड करने के लिए, मैं कर रहा हूँ में संदेह – mKorbel

संबंधित मुद्दे