JTreeTable DnD сумасшедший мигающий курсор - PullRequest
5 голосов
/ 23 ноября 2011

Я использую слегка модифицированную версию примера Sun JTreeTable, подкрепленную моей собственной моделью.Это будет третий пример (одна закладка на http://java.sun.com/products/jfc/tsc/articles/bookmarks/).

Все работает, как и ожидалось, кроме поддержки перетаскивания. Я хотел DnD, который больше похож на то, что обеспечивает JTree. Поскольку JTreeTable является расширеннымJTable предоставляет класс JTable.DropLocation для определения местоположений отбрасывания, который не предоставляет достаточно информации при отбрасывании содержимого в столбец, отображаемый в виде дерева JTreeTable (без пути и без дочернего индекса).пользовательский класс DropLocation, основанный на комбинации его версий JTable и * 1012. * Я также изменил метод рисования класса TreeTableCellRenderer, который предоставляется упомянутой реализацией JTreeTable, чтобы показатьэта новая информация для пользователя (теперь она может видеть, будет ли новый узел помещен внутри, до или после выбранного узла, если внутри столбца дерева, как вы ожидаете от JTree).

Есть одна проблема, хотя: курсор мыши сходит с ума, когда расположение перетаскивания отображается внутри столбца дерева.ars, а затем исчезает через несколько миллисекунд или это происходит так быстро, что курсор перетаскивания даже не отображается.Это происходит и с примером неизмененного Солнца.Я полностью в неведении относительно того, почему это происходит.Обнаружил другого человека с такой же проблемой по номеру http://www.java.net/node/663106,, но решение, предоставленное там, по-видимому, устанавливает местоположение отбрасывания компонента на ноль и не может быть получено с использованием метода JTreeTable.getDropLocation()Мне нужно это преобразовать в мой модифицированный DropLocation и затем рисовать материал на его основе.Я настолько близок к подходящему решению для моего варианта использования, что могу его попробовать.Эта мигающая вещь - единственное препятствие на моем пути.Есть идеи?

Использование Java 1.6.

PS: я выбрал пользовательский JTreeTable, а не один из существующих компонентов (например, Netbeans Outline или JXTreeTable), потому что онивсе, похоже, страдают от проблемы JTable.DropLocation и не предлагают поддержку удаления до или после выбранного узла дерева (только внутри).Если вам известен компонент, который обеспечивает такую ​​функциональность, я был бы рад услышать об этом.

1 Ответ

9 голосов
/ 23 ноября 2011

это звучит как проявление основной ошибки # 6700748 (не могу проверить, что чертовому ошибочному параду требуется много времени, чтобы подключиться к ..). Итак, цитируя исправление в JXTreeTable:

    /**
     * {@inheritDoc} <p>
     * 
     * Overridden to hack around #766-swingx: cursor flickering in DnD
     * when dragging over tree column. This is a core bug (#6700748) related
     * to painting the rendering component on a CellRendererPane. A trick
     * around is to let this return false. <p>
     * 
     * This implementation applies the trick, that is returns false always. 
     * The hack can be disabled by setting the treeTable's client property
     * DROP_HACK_FLAG_KEY to Boolean.FALSE. 
     * 
     */
    @Override
    public boolean isVisible() {
        return shouldApplyDropHack() ? false : super.isVisible();
    }


    /**
     * Returns a boolean indicating whether the drop hack should be applied.
     * 
     * @return a boolean indicating whether the drop hack should be applied.
     */
    protected boolean shouldApplyDropHack() {
        return !Boolean.FALSE.equals(treeTable.getClientProperty(DROP_HACK_FLAG_KEY));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...