2012-01-30 17 views
5

मैं ग्रहण के साथ काम कर रहा हूं और मुझे JXTreeTables के बारे में एक प्रश्न है। मुझे एक खिड़की चाहिए, नोड के बारे में कुछ जानकारी, पॉप अप करने के लिए, जब नोड डबल-क्लिक किया जाता है। अब, क्या क्लिक JXTreeTable या शून्य के डबल-क्लिक किए गए नोड को प्राप्त करना संभव है यदि क्लिक सीधे नोड पर नहीं था?डबल-क्लिक किए गए TreeTableNode कैसे प्राप्त करें?

उत्तर

4

मुझे थ्रेड क्लियोपेट्रा पर एक उत्तर मिला है जो उल्लेखनीय रूप से ठीक काम करता है और सरल है। यहाँ कोड है:

treeTable.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(final MouseEvent e) { 
     if (e.getClickCount() != 2) { 
      return; 
     } 

     final int rowIndex = treeTable.rowAtPoint(e.getPoint()); 

     if (rowIndex < 0) { 
      return; 
     } 

     final TreeTableNode selectedNode = (TreeTableNode)treeTable.getPathForRow(rowIndex).getLastPathComponent(); 
    } 
}); 
+0

खुशी है कि तुम एक समाधान :-) बस सावधान रहना है: इस तरह से श्रोता तालिका सेल जो नोड शामिल में एक डबल क्लिक करें _anywhere_ पर सक्रिय होगा, न कि केवल जब _directly_ नोड पर (उर्फ: इसका पाठ)। – kleopatra

+0

यह मेरा इरादा था लेकिन वैसे भी आपके उत्तर के लिए बहुत धन्यवाद :) :)! – user107043

2

मान लिया जाये कि आप tree.getRowForLocation (...) के व्यवहार मतलब है: वहाँ treeTable पर कोई एपीआई है, तो आप एपीआई लापता मारा और :-)

swingx समस्या ट्रैकर में सुधार मुद्दा दायर करने के लिए विचार कर सकते हैं

जब तक वह उपलब्ध नहीं होगा, आपको इसे एक कस्टम माउस लिस्टनर में करना होगा जो संबंधित पेड़ विधि को प्रतिनिधि करता है। में थोड़ा (खांसी ..) जा रहे गंदे एक JTree को श्रेणीबद्ध स्तंभ के लिए रेंडरर प्रकार कास्टिंग:

MouseListener l = new MouseAdapter() { 

     @Override 
     public void mouseClicked(MouseEvent e) { 
      if (e.getClickCount() != 2) return; 
      int column = treeTable.columnAtPoint(e.getPoint()); 
      if (!treeTable.isHierarchical(column)) return; 
      Rectangle cell = treeTable.getCellRect(0, column, false); 
      JXTree tree = (JXTree) treeTable.getCellRenderer(0, column); 
      // translate x to tree coordinates 
      int translatedX = e.getX() - cell.x; 
      int row = tree.getRowForLocation(translatedX, e.getY()); 
      LOG.info("row " + row); 
     } 

    }; 
    treeTable.addMouseListener(l); 

बस रिकार्ड के लिए, वहाँ Swinglabs forum over at java.net

संपादित

में एक समानांतर धागा है

की मान्यताओं ;-)

ऑप्स के साथ

संकट ही श्रोता एक डबल पर सक्रिय होगा जवाब देने तालिका में कहीं भी क्लिक करें सेल जिसमें नोड होता है, न कि जब नोड (उर्फ: इसका टेक्स्ट) पर सीधे। तो पता चला है कि पेड़ की रेखाओं के साथ आवश्यकता अधिक है .getClosestRowForLocation (..) अनुमानित पेड़ की तुलना में .getRowForLocation (..)।

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