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

Демонстрационный пример - LocationSensitiveDemo

Следующий демонстрационный пример, LocationSensitiveDemo, шоу a JTree это было сконфигурировано, чтобы поддерживать отбрасывание на любом узле за исключением одного названного "именами" (или его потомки). Используйте текстовое поле наверху фрейма как перетащить источник (это автоматически постепенно увеличит строковое число каждый раз, когда Вы перетаскиваете оттуда).

Поле комбинированного списка ниже дерева позволяет Вам переключать поведение для того, чтобы показать расположение отбрасывания. Поведение значения по умолчанию Swing должно показать расположение отбрасывания только, когда область может принять отбрасывание. Можно переопределить это поведение, чтобы всегда показать расположение отбрасывания (даже если область не может принять отбрасывание) или никогда не показывать расположение отбрасывания (даже если область может принять отбрасывание).

Снимок демонстрационного примера LocationSensitiveDemo.

Попробуйте это: 
  1. Нажмите кнопку Launch, чтобы работать LocationSensitiveDemo Сеть Java™ использования Запускается (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.Запускает пример ListDemo
  2. Инициируйте перетаскивание, нажимая сверху "Строки 0" в текстовом поле и перемещая мышь короткое расстояние. Перетащите в дерево и перемещение вниз. Поскольку Вы нависаете мышь над большинством узлов, перетаскивание acceptibility обозначается и курсором мыши и узлом, становящимся выделенным. Отбросьте текст на узел "цветов". Новый элемент становится дочерним элементом того узла и одноуровневого элемента к перечисленным цветам.
  3. Перетащите "Строку 1" от текстового поля в дерево. Попытайтесь отбросить это на узле "имен". Поскольку Вы перетаскиваете по тому узлу или его дочерним элементам, Swing не будет обеспечивать обратной связи расположения отбрасывания, и это не будет принимать данные.
  4. Измените поле комбинированного списка "Show drop location" на "Всегда".
  5. Повторите шаги 1 и 2. Расположение отбрасывания теперь выводит на экран для узла "имен", но невозможно бросить данные в ту область.
  6. Не измените поле комбинированного списка "Show drop location" на "Никогда".
  7. Повторите шаги 1 и 2. Расположение отбрасывания не будет выводить на экран ни для какой части дерева, хотя можно все еще бросить данные в узлы кроме "имен".

canImport метод для LocationSensitiveDemo похож на это:

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

    String item = (String)indicateCombo.getSelectedItem();
                
    if (item.equals("Always")) {
        info.setShowDropLocation(true);
    } else if (item.equals("Never")) {
        info.setShowDropLocation(false);
    }

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

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

    TreePath path = dl.getPath();

    // we do not support invalid paths or descendants of the names folder
    if (path == null || namesPath.isDescendant(path)) {
        return false;
    }

    return true;
}

Первый фрагмент кода, выведенный на экран полужирным, изменяет механизм обратной связи расположения отбрасывания. Если "Всегда", то расположение отбрасывания всегда показывают. Если "Никогда", расположение отбрасывания никогда не показывают. Иначе, поведение значения по умолчанию применяется.

Второй фрагмент кода, выведенный на экран полужирным, содержит логику, которая определяет, примет ли дерево данные. Если путь не будет допустимым путем или если это не будет путь имен (или его потомок), то это возвратит false, и импорт не будет принят.


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

Предыдущая страница: Расположение Чувствительное Отбрасывание
Следующая страница: Пустое Табличное Отбрасывание