Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/56: Рейтинг темы: голосов - 56, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20

Как создать GUI с возможностью Drag &b Drop?

21.08.2010, 00:16. Показов 10991. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

я только начинаю осваивать Java... Посоветуйте плиз как создать графический пользовательский интерфейс в NetBeans, который бы позволял выбирать иконки из палитры иконок (ну, например, палитра состоит из 3 иконок: треугольника, квадрата и круга) и перетягивать их на рабочее поле, а потом сохранять получившийся рисунок на жёсткий диск. Главным образом меня интересует реализация возможности Drag and Drop. Может, кто-то подкинет ссылочку на эту тему или какие-то исходники.

Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.08.2010, 00:16
Ответы с готовыми решениями:

Как работать с Drag&Drop?
Как с ними работать? какие событие, если можно то простой пример.

Как проскролить Treeview во время Drag&Drop?
B VB6 это легко делается использованием Win32 API функции SendMessage(...), в . NET это почему-то неработает. Фрагмент кода: Private...

Как организовать Drag&Drop из listbox в textbox ?
private void listBox1_MouseDown(object sender, MouseEventArgs e) { listBox1.DoDragDrop(listBox1.SelectedItem,...

20
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
21.08.2010, 08:19
Использовать соответствующий Listener)))
0
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
21.08.2010, 14:52  [ТС]
Спасибо за ответ! А можно по-подробнее Я так понимаю, что мне нужно использовать JavaFx. Цель - сделать программку по типу как тут http://www.javafx.com/samples/... index.html. Только в этой программке палитра состоит из окружностей разных размеров, а мне нужно чтобы в палитре были заранее приготовленные картинки. На правильном ли я пути?

Добавлено через 13 минут
И также нужно, чтобы была возможножность перемещать изображения по рабочей области
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
21.08.2010, 16:44
Вы бы основу выучили - стандартную базу так сказать а потом уже с Fx заморачивались а вообще есть отличные туториалы и мануалы на java.com А так сказать что делать чтобы было то-то и то-то на словах сложно. Вот будет свой код у вас и когда будет конкретная проблема обращайтесь сюда с кодом и разберемся в чем проблема.... А так вы не с того жабу учить начинаете сразу на листенеры и движущиеся фигуры)))
1
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
22.08.2010, 15:08  [ТС]
Вот кусок программы, который реализует перемещение картинки, загруженной в jLabel3, по полю. Но возникла проблемка...мне нужно, чтобы jLabel3 оставался на своём месте, а при нажатии мышкой создавалась бы копия jLabel3, которую я собственно и перемещала бы по полю. Как это сделать? Не могу найти нужную статейку.

private void jLabel3MouseDragged(java.awt.event.Mouse Event evt) {
jLabel3.setLocation(MouseInfo.getPointer Info().getLocation().x - jPanel2.getX(), MouseInfo.getPointerInfo().getLocation() .y-jPanel2.getY());
}
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
22.08.2010, 19:01
в след раз пиши с код в ТЭГАХ . [*JAVA] [*/JAVA]-без звездочек. воь чьл получится
Java
1
2
3
4
private void jLabel3MouseDragged(java.awt.event.MouseEvent evt) {
jLabel3.setLocation(MouseInfo.getPointerInfo().get Location().x - jPanel2.getX(), MouseInfo.getPointerInfo().getLocation().y-jPanel2.getY());
 
}
для копии лэйблй создай новый такой же лэйбл и двигай уже его))
ну на событии клика мышки реализуй функцию которая бы копировала лэйбл3 вот и все.
Drag'n'Drop FAQ
"Статейки", а точнее документация:
http://download.oracle.com/jav... mmary.html
http://download.oracle.com/doc... af_dnd.htm

Примеры:
http://download.oracle.com/jav... nDemo.java
1
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
22.08.2010, 21:13  [ТС]
Спасибки!

Я создала новую JLabel и поместила туда картинку smile1.png, которая хранится в фолдере "resources". Потом указала, что JLabel должен располагаться в соответствии с позицией курсора мышки. Но на экране вообще ничего не происходит В чём может быть загвоздка?О_о

Java
1
2
3
4
5
6
7
8
private void jLabel3MouseDragged(java.awt.event.MouseEvent evt) {                                     
       ImageIcon img = new ImageIcon("resources/smile1.png");
       int width = img.getIconWidth();
       int height = img.getIconHeight();
       JLabel lbl = new JLabel();
       lbl.setPreferredSize(new Dimension(width,height));
       lbl.setIcon(img);
       lbl.setLocation(MouseInfo.getPointerInfo().getLocation().x-jPanel1.getX(),MouseInfo.getPointerInfo().getLocation().y-jPanel1.getY());
Добавлено через 1 минуту
ну и в конце кода конечно "}"
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
22.08.2010, 21:53
Пожалуйста , есть кнопка спасибо тоже)))
ну вот говорил же надо начинать с основ.
На панели добавила этот JLabel???
другими словами на форму куда ты добавляла все компоненты добавь и эту
2
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
22.08.2010, 22:32  [ТС]
Ага, сейчас добавила:
Java
1
2
3
4
 
JLabel lbl = new JLabel(); 
jPanel1.add(lbl); 
...
но всё равно всё тухло. хмм. ещё прочитала, что нужно использовать paintComponent, но как именно его применять в моём случае - не ясно.

насчёт основ конечно я согласна. с простыми учебными примерами нет проблем, вроде всё ясно. хочется сделать что-то более менее интересное, решила попробовать с графикой, ну вот и завязла...
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
23.08.2010, 12:19
Нaдо нa основную пaнeль цeплять(нa ту гдe всe компонeнты висят). Почитaй основы гуи a нe срaзу прыгaй вышe головы току от этого нe будeт,будь послeдовaтeльнa.
1
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
23.08.2010, 15:17  [ТС]
Ок, буду разбираться и потом напишу что у меня получится!

Добавлено через 1 час 27 минут
Ну вот интересно...стала пробовать забить в NetBeans исходник с сайта http://java.ittoolbox.com/docu... anel-12876. У меня просто отображается JFrame c фоном цвета CYAN, хотя я указала правильный путь к картинке - создала фолдер resources в package: test. Почему же не отображается картинка?!

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package test;
 
import java.awt.*;
import javax.swing.*;
 
public class Main extends JFrame
{
public Main()
{
 setSize(500,500);
 JPanel panel = new JPanel();
 panel.setBackground(Color.CYAN);
 ImageIcon icon = new ImageIcon("resources\beads_crystal.png");
 JLabel label = new JLabel();
 label.setIcon(icon);
 panel.add(label);
 this.getContentPane().add(panel);
 
 setVisible(true);
}
 
public static void main (String[] args) // no args expected
{
 new Main();
} // end main
}
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
23.08.2010, 19:16
Папка resource в каком каталоге лежит?
0
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
24.08.2010, 00:46  [ТС]
Картинка лежит в package test в фолдере resources - (test.resources)

Добавлено через 1 минуту
Соответственно resources лежит в package test там же где и class Main
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
24.08.2010, 12:05
Соответственно, должно быть
Java
1
new ImageIcon("test/resources/beads_crystal.png")
Потому как при таком создании ты указываешь путь к файлу относительно директории откуда было запущено приложение
0
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
24.08.2010, 16:19  [ТС]
Так тоже не работает...Прикладываю 2 файла. В test_view1 изображено окно проекта, а в test_view2 - то, что получается после компиляции и запуска программы. Как видно картинка не отображается!
Миниатюры
Как создать GUI с возможностью Drag &b Drop?   Как создать GUI с возможностью Drag &b Drop?  
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
24.08.2010, 19:54
Попробуй задать размер label'у или во так:
Java
1
2
3
4
5
6
7
8
9
10
Label label = new JLabel(); 
label.setSize(100, 100); 
try{
Image image = ImageIO.read(getClass().getResourceAsStream("путь к картинке"));
}
catch (IOException ex){
System.out.println(ex.printStackTrace());
}
Icon icon = new ImageIcon(image.getScaledInstance(scaleX, scaleY, Image.SCALE_DEFAULT)); 
label.setIcon(icon);
1
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
25.08.2010, 00:21  [ТС]
Отлично! Теперь всё работает. Посылаю окончательный код, может кому-то пригодится:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package test;
 
import java.awt.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
 
public class Main extends JFrame
{
    public Main() throws IOException
    {
        setSize(500,500);
        JPanel panel = new JPanel();
        panel.setBackground(Color.CYAN);
 
        JLabel label = new JLabel();
        label.setSize(100, 100);
        Image image = ImageIO.read(getClass().getResourceAsStream("resources/beads_crystal.png"));
        int scaleX = image.getWidth(label); int scaleY = image.getHeight(label);
        Icon icon = new ImageIcon(image.getScaledInstance(scaleX, scaleY, Image.SCALE_DEFAULT));
        label.setIcon(icon);
        panel.add(label);
        this.getContentPane().add(panel);
        setVisible(true);
    }
 
    public static void main (String[] args) throws IOException // no args expected
    {
        new Main();
    } // end main
} // end class ImageDisplay
Ну а с размещением имиджей на jpanel при помощью курсора мышки - буду разбираться!
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
25.08.2010, 00:34
Цитата Сообщение от LianaN Посмотреть сообщение
Отлично! Теперь всё работает. Посылаю окончательный код, может кому-то пригодится:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package test;
 
import java.awt.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
 
public class Main extends JFrame
{
    public Main() throws IOException
    {
        setSize(500,500);
        JPanel panel = new JPanel();
        panel.setBackground(Color.CYAN);
 
        JLabel label = new JLabel();
        label.setSize(100, 100);
        Image image = ImageIO.read(getClass().getResourceAsStream("resources/beads_crystal.png"));
        int scaleX = image.getWidth(label); int scaleY = image.getHeight(label);
        Icon icon = new ImageIcon(image.getScaledInstance(scaleX, scaleY, Image.SCALE_DEFAULT));
        label.setIcon(icon);
        panel.add(label);
        this.getContentPane().add(panel);
        setVisible(true);
    }
 
    public static void main (String[] args) throws IOException // no args expected
    {
        new Main();
    } // end main
} // end class ImageDisplay
Ну а с размещением имиджей на jpanel при помощью курсора мышки - буду разбираться!
зря try/catch убрала, привыкай с ними код писать
0
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 20
25.08.2010, 21:56  [ТС]
Возвращаясь к начальной теме drag and drop... Ну вроде как получилось слепить программку, которая позволяет перетащить копию имиджа, хранящегося в JLabel: jLabel1, на JPanel: jPanel1. Но теперь я застряла на том как заставить полученный JLabel: label перемещаться за курсором мышки (при нажатии на мышку) по JPanel: jPanel1? Перерыла гугл, но пока что не нашла нужную инфу. Кто-то знает как решить проблему?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    private void jLabel1MousePressed(java.awt.event.MouseEvent evt) {                                     
            JLabel label = new JLabel();
            ClassLoader cldr = this.getClass().getClassLoader();
 
            java.net.URL imageURL = cldr.getResource("sw_app/resources/smile1.png");
            if (imageURL != null) {
                ImageIcon icon = new ImageIcon(imageURL);
                label.setIcon(icon);
                this.getContentPane().setLayout(null);
                label.setSize(label.getPreferredSize());
                label.setTransferHandler(new ImageSelection());
                MouseListener listener = new DragMouseAdapter() {
            };
                label.addMouseListener(listener);
            } else {
                System.out.println("Couldn't find file: ");
            }
            this.jPanel1.add(label);
            this.setVisible(true);
            this.jPanel1.revalidate();
            this.repaint();
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
class ImageSelection extends TransferHandler implements Transferable {
 
  private static final DataFlavor flavors[] = { DataFlavor.imageFlavor };
 
  private Image image;
 
  @Override
  public int getSourceActions(JComponent c) {
    return TransferHandler.COPY;
  }
 
  @Override
  public boolean canImport(JComponent comp, DataFlavor flavor[]) {
    if (!(comp instanceof JLabel) && !(comp instanceof AbstractButton)) {
      return false;
    }
    for (int i = 0, n = flavor.length; i < n; i++) {
      for (int j = 0, m = flavors.length; j < m; j++) {
        if (flavor[i].equals(flavors[j])) {
          return true;
        }
      }
    }
    return false;
  }
 
  @Override
  public Transferable createTransferable(JComponent comp) {
    // Clear
    image = null;
 
    if (comp instanceof JLabel) {
      JLabel label = (JLabel) comp;
      Icon icon = label.getIcon();
      if (icon instanceof ImageIcon) {
        image = ((ImageIcon) icon).getImage();
        return this;
      }
    } else if (comp instanceof AbstractButton) {
      AbstractButton button = (AbstractButton) comp;
      Icon icon = button.getIcon();
      if (icon instanceof ImageIcon) {
        image = ((ImageIcon) icon).getImage();
        return this;
      }
    }
    return null;
  }
 
  @Override
  public boolean importData(JComponent comp, Transferable t) {
    if (comp instanceof JLabel) {
      JLabel label = (JLabel) comp;
      if (t.isDataFlavorSupported(flavors[0])) {
        try {
          image = (Image) t.getTransferData(flavors[0]);
          ImageIcon icon = new ImageIcon(image);
          label.setIcon(icon);
          return true;
        } catch (UnsupportedFlavorException ignored) {
        } catch (IOException ignored) {
        }
      }
    } else if (comp instanceof AbstractButton) {
      AbstractButton button = (AbstractButton) comp;
      if (t.isDataFlavorSupported(flavors[0])) {
        try {
          image = (Image) t.getTransferData(flavors[0]);
          ImageIcon icon = new ImageIcon(image);
          button.setIcon(icon);
          return true;
        } catch (UnsupportedFlavorException ignored) {
        } catch (IOException ignored) {
        }
      }
    }
    return false;
  }
 
  // Transferable
  public Object getTransferData(DataFlavor flavor) {
    if (isDataFlavorSupported(flavor)) {
      return image;
    }
    return null;
  }
 
  public DataFlavor[] getTransferDataFlavors() {
    return flavors;
  }
 
  public boolean isDataFlavorSupported(DataFlavor flavor) {
    return flavors[0].equals(flavor);
  }
}
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
25.08.2010, 22:54
доки дажвы на oracle.com или sun.developers.ru
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.08.2010, 22:54
Помогаю со студенческими работами здесь

Игра-паззл. Как реализовать Drag&Drop
Задали сделать такую задачу: Создать приложение WinForms, позволяющее собрать паззл из девяти квадратных фрагментов. Каждый фрагмент...

Drag & Drop files. Как теперь получить файл?
Здравствуйте. Раньше были методы getAsText() getAsDataURL() getAsBinary() Теперь этих методов нет. Как получить файл, который...

Как сделать drag&drop файлов из моей программы в другую?
Меня интересует два вопроса: 1. При перетаскивании файлов из внешнего приложения в мою программу я не могу отловить движение мышки над...

Drag & Drop, как определить, что мы тащим видео файл?
Добрый день! Как определить, что мы тащим видео файл?

Как организовать перетаскивание (drag&drop) границы таблицы на форме?
Здравствуйте! Подскажите пожалуйста как организовать перетаскивание (drag&amp;drop) границы таблицы на форме?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru