Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Перетащите и Отбросьте и Передача данных
Расположение Чувствительное Отбрасывание
Домашняя страница > Создание GUI С JFC/Swing > Перетащите и Отбросьте и Передача данных

Расположение Чувствительное Отбрасывание

Иногда у Вас есть сложный компонент, и Вы хотите, чтобы пользователь был в состоянии отбросить на некоторых частях его, но не на других. Возможно, это - таблица, которая позволяет данным быть отброшенными только в определенных столбцах; или возможно это - дерево, которое позволяет данным быть отброшенными только на определенных узлах. Очевидно, Вы хотите, чтобы курсор обеспечил точную обратную связь — это должно только показать расположение отбрасывания, когда это по определенной части компонента, который принимает отбрасывания.

Это просто выполнить, устанавливая необходимую логику в canImport(TransferHandler.TransferSupport) метод TransferHandler class. Это работает только с этой определенной версией canImport потому что это вызывают continously, в то время как перетащить жест по границам компонента. Когда этот метод возвращает true, Swing показывает курсор отбрасывания, и расположение отбрасывания визуально обозначается; когда этот метод возвращает false, Swing показывает "нет - перетаскивают" курсор, и расположение отбрасывания не выводится на экран.

Например, вообразите таблицу, которая позволяет отбрасывание, но не в первом столбце. canImport метод мог бы выглядеть примерно так:

public boolean canImport(TransferHandler.TransferSupport info) {
    // for the demo, we will only support drops (not clipboard paste)
    if (!info.isDrop()) {
        return false;
    }

    // we only import Strings
    if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)) {
        return false;
    }

    // fetch the drop location
    JTable.DropLocation dl = (JTable.DropLocation)info.getDropLocation();

    int column = dl.getColumn();

    // we do not support invalid columns or the first column
    if (column == -1 || column == 0) {
        return false;
    }

    return true;
}

Код, выведенный на экран полужирным, указывает на чувствительную к расположению логику отбрасывания: Когда пользователь отбрасывает данные таким способом, которым столбец не может быть вычислен (и поэтому недопустимо), или когда пользователь отбрасывает текст в первом столбце, canImport метод возвращает false — таким образом, Swing показывает "нет - перетаскивают" курсор мыши. Как только пользователь перемещает мышь от первого столбца canImport возвращает true, и Swing показывает перетащить курсор.

Затем, мы показываем демонстрационный пример дерева, которое реализовало чувствительное к расположению отбрасывание.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Показ Расположения Отбрасывания
Следующая страница: Демонстрационный пример - LocationSensitiveDemo