Как получить дважды щелкнув TreeTableNode? - PullRequest
5 голосов
/ 30 января 2012

Я работаю с Eclipse, и у меня есть вопрос о JXTreeTables. Я хочу, чтобы окно, показывающее некоторую информацию об узле, всплывало при двойном щелчке по узлу. Теперь возможно ли получить узел двойного щелчка в JXTreeTable или значение null, если щелчок не был непосредственно на узле?

Ответы [ 2 ]

4 голосов
/ 04 февраля 2012

Я получил ответ на упомянутую тему kleopatra, которая прекрасно работает и проще.Вот код:

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();
    }
});
2 голосов
/ 02 февраля 2012

Предполагая, что вы имеете в виду поведение tree.getRowForLocation (...): в treeTable нет api, вы нажали недостающий api и можете рассмотреть вопрос об улучшении в трекере проблем swingx: -)

Пока это не будет доступно, вы должны сделать это самостоятельно в пользовательском MouseListener, который делегирует соответствующий метод дерева. Немного (кашель ..) грязно при приведении типов к рендереру для иерархического столбца в 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 на java.net

есть параллельная ветка

Редактировать

горе предположений ;-)

При собственном ответе ОП слушатель будет запускать двойной щелчок в любом месте в ячейке таблицы, в которой находится узел, а не только тогда, когда прямо над узлом (иначе: его текст ). Таким образом, выясняется, что требование в большей степени соответствует принципам tree.getClosestRowForLocation (..), чем предполагаемое tree.getRowForLocation (..).

...