2015-09-12 9 views
9

हे वहाँ समुदाय मैं सोच रहा था कि एक प्रोग्राम बनाने के लिए संभव है जो उपयोगकर्ता को हार्ड ड्राइव (डेस्कटॉप, दस्तावेज़ फ़ोल्डर, वीडियो फ़ोल्डर) पर कहीं से भी फ़ाइल खींचने की अनुमति देता है। और इसे कार्यक्रम की खिड़की में छोड़ दें।जावाएफएक्स एक प्रोग्राम में एक फ़ाइल खींचें और छोड़ें

मैं एक मीडिया प्लेयर बना रहा हूं और मैं एक एमपी 4 को खिड़की में खींचकर छोड़कर वीडियो चलाने में सक्षम होना चाहता हूं। क्या मुझे फ़ाइल को एक चर में, या फ़ाइल के स्थान को एक चर में स्टोर करने की आवश्यकता है। साथ ही, यह महत्वपूर्ण है कि मैं क्रॉस प्लेटफ़ॉर्म के लिए समर्थन रखूं।

मैं जावा 7 अपडेट 79 जेडीके के साथ जावाएफएक्स का उपयोग कर रहा हूं।

अग्रिम धन्यवाद।

+0

मैं JavaFX विकास के लिए जावा 8+ की अनुशंसा करता हूं। इसके अलावा, यदि जावा जावा 8 से संबंधित नहीं है तो जावा -8 टैग हटाएं। – jewelsea

+1

@jewelsea हाँ मेरा मतलब है कि मुझे नहीं लगता कि सिंटैक्स ड्रैग और ड्रॉप फ़ंक्शन के लिए इतना कुछ बदलता है, इसलिए संस्करण सबसे अधिक संभावना अप्रासंगिक है। किसी भी तरह से मैं कोड के बारे में पूछ रहा हूं कि किस संस्करण का उपयोग नहीं करना है। हालांकि आपकी प्रतिक्रिया के लिए Ty! – TheHoop

+0

@TheHoop मुझे लगता है कि जावा के पिछले 18 साल के इतिहास (विशेष रूप से इवेंट हैंडलर जैसी चीजों पर लागू) की तुलना में जावा 7 और जावा 8 के संस्करणों के बीच वाक्यविन्यास में और परिवर्तन हुए थे। कृपया टैग और प्रश्न सुसंगत बनाओ। यदि आप कुछ कोड पोस्ट कर चुके हैं तो यह भी सहायक होगा। –

उत्तर

4

यहां एक साधारण ड्रैग और ड्रॉप उदाहरण है जो फ़ाइल नाम और स्थान सेट करता है। फ़ाइलों को खींचें और यह उनका नाम और स्थान दिखाता है। एक बार जब आप जानते हैं कि यह वास्तव में फ़ाइल को चलाने के लिए एक पूरी तरह से अलग मामला होना चाहिए। यह मुख्य रूप से Oracle के प्रलेखन से लिया जाता है: https://docs.oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm

एक न्यूनतम कार्यान्वयन की जरूरत है दो EventHandler रों OnDragOver और OnDragDropped निर्धारित किया है।

public class DragAndDropTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Label label = new Label("Drag a file to me."); 
     Label dropped = new Label(""); 
     VBox dragTarget = new VBox(); 
     dragTarget.getChildren().addAll(label,dropped); 
     dragTarget.setOnDragOver(new EventHandler<DragEvent>() { 

      @Override 
      public void handle(DragEvent event) { 
       if (event.getGestureSource() != dragTarget 
         && event.getDragboard().hasString()) { 
        /* allow for both copying and moving, whatever user chooses */ 
        event.acceptTransferModes(TransferMode.COPY_OR_MOVE); 
       } 
       event.consume(); 
      } 
     }); 

     dragTarget.setOnDragDropped(new EventHandler<DragEvent>() { 

      @Override 
      public void handle(DragEvent event) { 
       Dragboard db = event.getDragboard(); 
       boolean success = false; 
       if (db.hasString()) { 
        dropped.setText(db.getString()); 
        success = true; 
       } 
       /* let the source know whether the string was successfully 
       * transferred and used */ 
       event.setDropCompleted(success); 

       event.consume(); 
      } 
     }); 


     StackPane root = new StackPane(); 
     root.getChildren().add(dragTarget); 

     Scene scene = new Scene(root, 500, 250); 

     primaryStage.setTitle("Drag Test"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+2

आपको 'हैस्टफाइल()' के बजाय 'हैफ़ाइल()' का उपयोग करना चाहिए। इस ट्यूटोरियल का संदर्भ लें: http://www.java2s.com/Code/Java/JavaFX/DraganddropfiletoScene.htm। –

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