Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Drag and Drop 
:(
    Опции темы
Reptor
Дата 20.8.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



Мне необходимо перетаскивать картинки и я вот увидел такой во пример.

http://blogs.sun.com/geertjan/entry/gettin...rted_on_windows

можно ли помоч его разобрать так как я про эту технологию мало что знаю а с англ у меня туго?. А в этом примере происходит то что мне необходимо. 



PM MAIL ICQ   Вверх
Reptor
Дата 21.8.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



может есть на русском какое объяснение про Drag and Drop? или ещё какой пример хороший?
PM MAIL ICQ   Вверх
_Michael
Дата 21.8.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Ты рисунки откуда хочеш перетаскивать? Откудато извне твоей аппликации или внутри, из JLabel например?


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Reptor
Дата 21.8.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



_Michael,  Я хочу перетаскивать из  JLabel (JButton).
PM MAIL ICQ   Вверх
_Michael
Дата 21.8.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Одним словом здесь в архиве плод моих творений, вроде разобрался более-менее. smile 
Полдня сидел думаю то что тебе надо smile

Это сообщение отредактировал(а) _Michael - 21.8.2007, 18:37

Присоединённый файл ( Кол-во скачиваний: 36 )
Присоединённый файл  dnd.rar 3,56 Kb


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Reptor
Дата 21.8.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



_Michael, огромное спасибо буду смотреть  smile 
PM MAIL ICQ   Вверх
_Michael
Дата 21.8.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



 smile сначала скомпилируй запусти посмотри то ли что тебе надо. а потом если че не ясно спрашивай 


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Reptor
Дата 22.8.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



_Michael, похоже то что надо только небольшое уточнение в том что я беру с кнопки картинку и перетаскиваю её на произвольное место на JPanel.

Добавлено через 33 секунды
А в примере вроде есть только одна точка в которую можно перетащить

Добавлено через 2 минуты и 56 секунд
но это уже молочи ещё раз огромнейшее тебе спасибо _Michael,   smile  я думаю с меня плюс

Добавлено через 3 минуты и 37 секунд
да снова забыл если что будет не ясно то я обязательно обращюсь  smile 
PM MAIL ICQ   Вверх
_Michael
Дата 22.8.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Цитата(Reptor @  22.8.2007,  18:10 Найти цитируемый пост)
_Michael, похоже то что надо только небольшое уточнение в том что я беру с кнопки картинку и перетаскиваю её на произвольное место на JPanel.

Добавлено через 33 секунды
А в примере вроде есть только одна точка в которую можно перетащить

Ну сам понимаеш что тут господствует LayoutManager который ты установил для своей панели, ет не так просто, ну а может я просто неумею smile но у меня на работе вроде как есть пример с перетаскиванием в любое место, завтра посмотрю

Цитата(Reptor @  22.8.2007,  18:10 Найти цитируемый пост)
я думаю с меня плюс

Было б очень кстати smile жду не дождусссь smile приятно что мой пример тебе помог smile

Цитата(Reptor @  22.8.2007,  18:10 Найти цитируемый пост)
да снова забыл если что будет не ясно то я обязательно обращюсь    
 чем сможем тем поможем smile


Это сообщение отредактировал(а) _Michael - 22.8.2007, 21:58


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
_Michael
Дата 23.8.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Чтоб иконка была в любом месте, делаем минимальные изменения, а именно, DropTarget вешаем теперь не на JLabel а на панель на которой лежит етот наш JLabel чтоб можна было "дропать" в любом месте Панели
Код

//        Вот так было
//        label1 = new JLabel("Destination", SwingConstants.LEADING);
//        label1.setDropTarget(dt);
//        JPanel panel1 = new JPanel(new GridLayout(1, 1));
//        Вместо етого делаем так 
        label1 = new JLabel();//"Destination", SwingConstants.LEADING);
        JPanel panel1 = new JPanel();//new GridLayout(1, 1));
        panel1.setDropTarget(dt);
        TitledBorder t1 = BorderFactory.createTitledBorder("Drop anywhere here");
        panel1.add(label1);
        panel1.setBorder(t1);


и второе изменение, в методе public void drop(DropTargetDropEvent e) дописываем одну строчку, точнее две
Код

        public void drop(DropTargetDropEvent e) {
                        ......
// Вот так было но помним что мы повешали DropTarget на панель а не на JLabel поетому ети строки неверно.
//            JLabel c = (JLabel) source.getComponent();
//            c.setIcon((Icon) data);

            label1.setIcon((Icon) data);
            label1.setLocation(e.getLocation());
                }




--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Reptor
Дата 7.9.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



Вот у меня ещё одна проблема возникла а состоит она в следующем:
 когда мы перетягиваем картинку то я так понял мы ее цепляем на уже сущуствующий Label (ну тот который на панели) собственно вот жта часть 
   
Код

public void drop(DropTargetDropEvent e) {    
                        ......    

            label1.setIcon((Icon) data);    
            label1.setLocation(e.getLocation());    
                }


а можно ли как то делать это на панели ? может как то картинку рисовать или ещё что я вчера пробовал так и нечё не получилось. Просто я зделал 2 лабел с картинками и я сначала тащу с одной а потом с 2-ой и они друг друга перетирают. А надо что б их 2 оставалось. 
Как это можно реализовать? 

Я предпалпгаю надо как то рисовать её на панели (создавать или ещё както) и делать массив вот этих кртинок DataFlavor я точно не знаю так как толком ещё мало понимаю весь процесс.
PM MAIL ICQ   Вверх
Reptor
Дата 8.9.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



 smile  вроде как данная проблема решилась. Просто создавал всегда лабел и использовал 
Код

setLayout(null)

PM MAIL ICQ   Вверх
Reptor
Дата 12.9.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



Ещё есть один вопрос а как сделать так что б когда при перетаскивании картинки картинка с источника исчезала?
PM MAIL ICQ   Вверх
Reptor
Дата 12.9.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



зделал следующим образом и работает нормально 
Код


class DSListener implements DragSourceListener {

        /**
         * @param e the event
         */
        public void dragDropEnd(DragSourceDropEvent e) {

            if (e.getDropSuccess() == false) {
                System.out.println("not successful");
                DragLabel.this.setVisible(false);                         // VOT TYT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                return;
            }

            /*
             * the dropAction should be what the drop target specified
             * in acceptDrop
             */
            System.out.println("dragdropend action " + e.getDropAction());

            // this is the action selected by the drop target
            if (e.getDropAction() == DnDConstants.ACTION_MOVE)
                DragLabel.this.setText("");
        }


в классе DropLabel  и его внутренем классе DSListener в методе dragDropEnd зделал DragLabel.this.setVisible(false);   и хотел уточнить насколько это верно и не критично может более правильно в другом месте это делать и как то по другому? Может как то удалять картинку с DropLabel или ещё как?  smile 

PM MAIL ICQ   Вверх
_Michael
Дата 12.9.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Ну если так подумать, то наверное метод public void dragDropEnd(DragSourceDropEvent e) для того и предназначем чтоб отлавливать завершение етого всего процесса. Не знаю но если тебе етого DragLabel больше не надо ведь фактически то ета DragLabel и служила для единственной цели служить источником картинки, и если ты картинку перетащил уже то можно ету DragLabel  вообще убрать из панели чтоб ее сборщик мусора "утилизировал" smile а не просто setVisible(false)

Это сообщение отредактировал(а) _Michael - 12.9.2007, 16:37


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Reptor
Дата 12.9.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



Цитата

 и если ты картинку перетащил уже то можно ету DragLabel  вообще убрать из панели чтоб ее сборщик мусора "утилизировал"  а не просто setVisible(false)


Вот так как это реализовать?
PM MAIL ICQ   Вверх
_Michael
Дата 12.9.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Цитата(Reptor @  12.9.2007,  15:14 Найти цитируемый пост)
Может как то удалять картинку с DropLabel или ещё как? 

Ты наверное сплутал DragLabel  с DropLabel или я чтото не понимаю. smile

Добавлено @ 16:39
ну есть же такой метод remove(Component comp); 

Код

......
panel.remove(DragLabel.this); // панель где лежит твоя DragLabel
......


Както так и не забудь если где то ссилки на ету Jlabel есть также их сделать null'ами

Это сообщение отредактировал(а) _Michael - 12.9.2007, 16:43


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Reptor
Дата 12.9.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



_Michael, ой DropLabel - это опечатка я имел ввиду DragLabel

Добавлено через 3 минуты и 23 секунды
да делаю 
Код

remove(DragLabel.this);
 

нечего не происходит. Как быть?
PM MAIL ICQ   Вверх
_Michael
Дата 12.9.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Надо еще валидейт и репеинт может чтото одно не знаю точно.
Код

panel.remove(Draglabel.this);
panel.validate();
panel.repaint();        



--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Reptor
Дата 12.9.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



подожди что то я запутался 

panel.remove(DragLabel.this);

но ведь панел я не знаю мне она не доступна или как к ней достучаться из dragDropEnd
PM MAIL ICQ   Вверх
_Michael
Дата 12.9.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



Надо еще валидейт и репеинт может чтото одно не знаю точно.
Код

panel.remove(Draglabel.this);
panel.validate();
panel.repaint();        


Добавлено @ 12:57
Попробуй взять парента, и посмотреть может ето она как раз.
Код

DragLabel label = (DragLabel)e.getSource(); // если не ошыбаюсь ето должна быть ета твоя DragLabel. Но проверь!
Container cont = label.getParent();
cont.remove(label);
cont.validate();
cont.repaint();

или
Код

Container cont = DragLabel.this.getParent();
cont.remove(DragLabel.this);
cont.validate();
cont.repaint();


Это сообщение отредактировал(а) _Michael - 12.9.2007, 17:03


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
newsl
Дата 8.9.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.11.2009

Репутация: нет
Всего: нет



мине необхадимо переключится на ДнД в процессе простого передвижения компонанта по панели тоесть , когда просто предевигаю компонент в приделах  панели то просто перерисововаю его на позицию курсора когдаже компонент зашол полностю за краи фреима то надо включить ДнД проблема в том что когда перетаскиваю просто по панели и подовлаю ДнД то неудаётся отослать ешё один event когда зашол за краи , как создать такои event и отослать нужному обработчикку низнаю помагите у каво есть харошие идеи по этому поводу ибо очен надо причом срочно ! ?

Добавлено через 1 минуту и 45 секунд
была идея както создать собственый DragGestureEvent толко вот как и как отослат низнаю :( если вообше такое вазможно

Добавлено через 7 минут и 6 секунд
Цитата(Reptor @ 12.9.2007,  12:01)
Ещё есть один вопрос а как сделать так что б когда при перетаскивании картинки картинка с источника исчезала?

попробуи это 

oldFrame.getContentPane().validate();
oldFrame.getContentPane().repaint();
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.