2012-06-28 17 views
6

मैं वर्तमान में एक फ़ाइल सिस्टम का प्रतिनिधित्व करने वाले JavaFx-2 के TreeView के साथ काम कर रहा हूं।TreeItem द्वारा समर्थित ड्रैग और ड्रॉप है?

मैं drag and drop को स्थानांतरित करने की अनुमति देने के लिए सक्षम करना चाहता हूं, लेकिन ऐसा लगता है कि TreeItem में ड्रैग ईवेंट श्रोताओं को शामिल नहीं किया गया है। मैं केवल englobing TreeView ऑब्जेक्ट पर ड्रैग और ड्रॉप को लागू करने में सक्षम था, लेकिन यह उप-वस्तुओं के लिए काम नहीं करता है।

क्या मुझे कुछ याद आ रही है, या ड्रैग और ड्रॉप घटनाएं अभी तक TreeItems के लिए समर्थित नहीं हैं?

उत्तर

5

प्रश्न Oracle मंच पर csh से उत्तर दिया: https://forums.oracle.com/forums/message.jspa?messageID=10426066#10426066

आप TreeCell पर ड्रॉप पर खींचें लागू करने के लिए की है।

लिखें इस तरह एक CellFactory:

TreeView<String> treeView = new TreeView<String>(); 
    treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() { 
     @Override 
     public TreeCell<String> call(TreeView<String> stringTreeView) { 
      TreeCell<String> treeCell = new TreeCell<String>() { 
       protected void updateItem(String item, boolean empty) { 
        super.updateItem(item, empty); 
        if (item != null) { 
         setText(item); 
        } 
       } 
      }; 

      treeCell.setOnDragDetected(new EventHandler<MouseEvent>() { 
       @Override 
       public void handle(MouseEvent mouseEvent) { 

       } 
      }); 

      return treeCell; 
     } 
    }); 

वह अपनी प्रतिष्ठा का दावा या उसके समाधान के लिए जानकारी जोड़ने के लिए चाहता है, मैं इस सवाल का जवाब बदल देंगे।

+2

आप कभी भी लिखा है कि यह कैसे लागू किया गया था? कुछ कार्यात्मक कोड देखना पसंद करेंगे। चियर्स! –

+0

टेक्स्ट के रूप में खींचें और छोड़ें एक बहुत ही खराब समाधान है। मेरे नोड्स जटिल जावा वस्तुएं हैं, जो पाठ के रूप में प्रस्तुत की जाती हैं। – Aubin

2

@Timst द्वारा उत्तर सही है, लेकिन आपको उपरोक्त मामले में "updateItem" विधि कारण बदलना चाहिए, आप "TreeItem" के ग्राफ़िक को सेट करने में सक्षम नहीं होंगे और पेड़ का पतन ठीक से काम नहीं करेगा (जीता उपनोड में पाठ को साफ़ नहीं करें)।

सिर्फ करने के लिए प्रक्रिया को परिवर्तित:

@Override 
protected void updateItem(String item, boolean empty) { 
    super.updateItem(item, empty); 
    if (!empty && item != null) { 
     setText(item); 
     setGraphic(getTreeItem().getGraphic()); 
    }else{ 
     setText(null); 
     setGraphic(null); 
    } 
}