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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Drag&Drop для своего компонента, Drag работает не так, как хотелось бы 
V
    Опции темы
Aehn
Дата 28.4.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Написал свой компонент, который рисует сам себя, и добавил к нему обработчик события мыши mouseDragged. Перетаскивание, вроде, работает, но с побочными нежелательными эффектами. Скорее всего, мне надо контролировать что-то дополнительно, но что и как?

Маленький пример

Код

import javax.swing.*;
import java.awt.*;

    class MyComponent extends JComponent
    {
      int x0,y0;              //координаты объекта
       public MyComponent()
       {
            super();          
            x0=10;            // начальная координата по оси Х
            y0=10;            // начальная координата по оси У
            setPreferredSize(new Dimension(200, 200));
            setBounds(x0,y0,120,120);  //месторасположение и размеры
           addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
              public void mouseDragged(java.awt.event.MouseEvent evt) {
                  x0=evt.getX();  // новые координаты
                  y0=evt.getY();
                  setBounds(x0,y0,120,120); // новое месторасположение
              }
          });
      }
       public void paintComponent(Graphics g)
       {  super.paintComponent(g);
          g.drawRect(10,10,100,100);
       }
    }

public class Test 
    {
    JPanel jPanel1;

    public static void main(String[] args) {
        new Test();
    }

    public Test()
    {

        MyComponent myComponent = new MyComponent();
        System.out.println(myComponent.getPreferredSize());


        jPanel1 = new JPanel();
        jPanel1.setLayout(null);
        jPanel1.add( myComponent);

        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(jPanel1);

        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}


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


Эксперт
***


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

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



Код

  addMouseMotionListener(new java.awt.event.MouseMotionAdapter()
  {
   Point oldPosition;

   public void mouseMoved(java.awt.event.MouseEvent e)
   {
    oldPosition = e.getPoint();
   }

   public void mouseDragged(java.awt.event.MouseEvent e)
   {
    Component comp = e.getComponent();
    Point newPosition = e.getPoint();

    if(oldPosition != null)
    {
     Point loc = comp.getLocationOnScreen();
     comp.setLocation(newPosition.x - (oldPosition.x - loc.x),
                      newPosition.y - (oldPosition.y - loc.y));
    }
   }
  });

PM MAIL   Вверх
ki6opr
Дата 4.5.2008, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



сори за флуд, а вот стало интересно а можно ли "перетащить" компонент с одной панели на другую ? 
наверно только если в новую панель его добавить а из старой убрать  и сделать обоим validate ? поделитесь мыслью кому не жалко smile 
PM MAIL ICQ   Вверх
Aehn
Дата 4.5.2008, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все зависит от задачи, можно сделать и так.
Но тогда при удалении объекта с панели теряется информация, возможное "наполнение" объекта. Возникает необходимость предусмотреть промежуточное копирование объекта.
В любом случае, это неплохая идея.
PM MAIL   Вверх
ki6opr
Дата 4.5.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



как полезно гуглить , нашел замечательный Сановский туториал где описано как правильно решать такие задачи
http://java.sun.com/docs/books/tutorial/ui.../dnd/index.html

еще раз сори за флуд, вдруг кому пригодиться smile
PM MAIL ICQ   Вверх
Aehn
Дата 4.5.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Иногда проблема бывает не в том, что нет какого-то документа, а в том, что в описании нужно узнать именно свою задачу, и понять как ее, описанную в документации информацию, использовать в своем случае. Для этого нужен опыт, которого у меня, скажем, нет. Для того и существуют форумы, чтобы делиться опытом.

А на стандартный Sun-овский сайт кто угодно может сослаться. Тогда сразу при заходе на Java-форум можно написать:"Иди на java.sun.com" и все! И учебники с книгами не надо выпускать. Ведь, все есть на сайте.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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