2012-01-30 15 views
5

Eclipse ile çalışıyorum ve JXTreeTables hakkında bir sorum var. Bir düğüm çift tıklandığında, düğüm hakkında bazı bilgileri gösteren bir pencere istiyorum. Şimdi, tıklama doğrudan bir düğümde değilse, JXTreeTable'ın çift tıklamalı düğümünü veya null'ı almak mümkün mü?Çift tıklanmış TreeTableNode nasıl edinilir?

cevap

4

Mükemmel bir şekilde işleyen ve daha basit olan kleopatra iş parçacığı üzerine bir yanıt aldım. İşte kod:

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

Eğer sadece dikkat :-) bir çözüm memnun: (sadece zaman _directly_ düğüm üzerinde, dinleyici düğümü içeren tablo hücresinde bir çift tıklama _anywhere_ tetiklenir bu şekilde aka: metni). – kleopatra

+0

Bu benim amacımdı, ama yine de cevabınız için çok teşekkürler :) – user107043

2

Eğer tree.getRowForLocation (...) davranışını anlama varsayarsak: treeTable üzerinde hiçbir API yoktur, sen api eksik hit ve

:-) SwingX sorun izleyicide bir gelişme sorununu dosyaya düşünebilirsiniz

Uygun olana kadar, kendiniz ilgili ağaç yöntemine atanan özel bir MouseListener'de yapmanız gerekir. hafifçe (öksürük ..) gidiş kirli bir JTree için hiyerarşik sütun için oluşturucusunu tür dönüşümü:

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

Bilgin için Swinglabs forum over at java.net

Düzenleme

de paralel bir iplik var OP'lerine ile varsayımlar ;-)

ait

sıkıntılardan tabloda yerde tıklayın çifte tetiklenir dinleyici cevap kendi düğümü içeren hücre, yalnızca düğümü üzerinde değil (doğrudan: onun metin). Yani gereksinimi daha fazla tree.getClosestRowForLocation (..) çizgileri boyunca varsayılan tree.getRowForLocation (..) satırından daha fazladır.