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
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();
}
});
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üşünebilirsinizUygun 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.
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
Bu benim amacımdı, ama yine de cevabınız için çok teşekkürler :) – user107043