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

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

21.08.2010, 00:16. Показов 10885. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru