Форум программистов, компьютерный форум, киберфорум
JavaFX
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 07.04.2023
Сообщений: 13
1

Двигать картинки с помощью Drag-and-Drop на JavaFX

07.06.2024, 13:00. Показов 209. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

в моем задание (настольная игра) мне надо перемещать фигуры с помощью Drag-and-Drop.
Я сначала решил научиться работать только с GUI для перемещения картинок. Но у мене не получаеться. Я могу перетаскивать картинки только на поля, где уже есть картинка, но не на поля, которые свободны.

Игровое поле представляет собой GridPane (8x8). Каждая ячейка имеет ImageView в качестве дочернего элемента.
ImageView могут содержать либо изображения (для фигур), либо null- значения, если на поле нет фигуры.

Сначала я разместил фигуры в верхнем и нижнем рядах.
Я хотел попробовать переместить фигуры из верхнего ряда (imgViewField[i][0]) в другие поля. Я понял, что мои фигуры можно поместить только на поля, где уже есть изображение (imgViewField [i][7]), но не на пустые поля (imgViewField [i][6]).

Кто может подсказать, что я делаю неправильно?

Я написал два метода для Drag&Drop, один для Source и один для Target.

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
private void makeImageViewsDraggable(ImageView sourceNode){
    sourceNode.setOnDragDetected((MouseEvent event) -> {
 
Dragboard db = sourceNode.startDragAndDrop(TransferMode.ANY);
 
ClipboardContent content = new ClipboardContent();
content.putImage(sourceNode.getImage());
 
        db.setContent(content);
 
        event.consume();
    });
 
    sourceNode.setOnDragDone((DragEvent event) -> {
 
if (event.getTransferMode() == TransferMode.MOVE) {
 
sourceNode.setImage(null);
        }
        event.consume();
    });
 
}
 
private void setGestureTarget(ImageView targetNode){
 
    targetNode.setOnDragOver((DragEvent event) -> {
 
if (event.getGestureSource() != targetNode &&
                event.getDragboard().hasImage()) {
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
        }
 
        event.consume();
    });
 
    targetNode.setOnDragEntered((DragEvent event) -> {
 
if (event.getGestureSource() != targetNode && event.getDragboard().hasImage()) {
targetNode.setEffect(new DropShadow());
        }
    });
 
 
    targetNode.setOnDragExited((DragEvent event) -> {
 
 if (!event.isDropCompleted() &&
event.getGestureSource() != targetNode &&
                event.getDragboard().hasImage()) {
targetNode.setEffect(null);
        }
        event.consume();
    });
 
 
    targetNode.setOnDragDropped((DragEvent event) -> {
 
        Dragboard db = event.getDragboard();
boolean success = false;
 
 
 if (db.hasImage()) {
 targetNode.setImage(db.getImage());
success = true;
        }
        event.setDropCompleted(success);
        event.consume();
    });
 
}


Мой контроллер выглядит вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 @Override
    public void initialize(URL location, ResourceBundle resources) {
 
        initGrid(grdPane); //создает Grid (8x8)
        imgViewField = initImageViews(grdPane); //Создает ImageView-Array, который полностью соответствует гриду. 
 
 
        setImages(imgViewField); // добавляет картинки в массив imgViewField, я добавил картинки в верхний (imgViewField[i][0]) и //нижний ряд (imgViewField[i][7]).
 
        for (int i = 0; i < imgViewField.length; i++) {
            for (int j = 0; j < imgViewField[0].length; j++) {
 
              makeImageViewsDraggable(imgViewField[i][0]);
 
              setGestureTarget(imgViewField[i][7]);
 
              setGestureTarget(imgViewField[i][6]);
 
            }
        }
    }
В итоге, images перетаскиваються с верхнего в нижний ряд, в котором уде есть images. А в предпоследний ряд, где нет картинок они не перетаскиваються.
Помогите пожалуйста решить мою задачу.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2024, 13:00
Ответы с готовыми решениями:

Drag&Drop картинки
как сделать чтобы при перетаскивании картинки (например из мозилы), она сохранялась в переменную...

Drag and Drop картинки в pictureBox
Перечитал весь msdn про drag and drop но не смог нормально найти как мне перетащить картинку с...

Drag and Drop Картинки на картинку
Добрый день ув. Программисты. Есть форма на ней статичный Image1. Как сделать так чтоб когда я...

Две картинки, Drag and Drop
Дело такое, написал скелет программы которая грузит изображение и отрисовывает его на другом...

Drag N Drop картинки из браузера
В общем нужно чтобы при перетаскивании картинки из браузера на форму в Memo или Edit (да хоть...

0
07.06.2024, 13:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2024, 13:00
Помогаю со студенческими работами здесь

Drag'n'drop открытие картинки mfc
Каким образом можно реализовать открытие картинки Drag'n'drop в приложении mfc на основе диалоговых...

[WPF] Drag&Drop картинки
В следующем коде картинка перемещается из img2 в img1 только если в img1 назначить Source картику,...

Drag&Drop картинки из браузера в браузер
Все привет. Возникла задача, которая, к сожалению, гуглением не решилась. Нужно сделать загрузку...

Кроссбраузерная загрузка файлов с помощью Drag 'n Drop
Делаю &quot;потянул и бросил&quot; мультифайловую загрузку. Идея в том, что в тех браузерах, которые...

Интерфейс пользователя с помощью Drag & Drop в JBuilder
Когда попытался создавать юзер интерфейс с помощю Drag&amp;Drop в JBuilder, то оказалось что он просто...

Перемещение файлов с помощью мыши (Drag&Drop)
Позволяет ли JAVA перемещать файлы с помощью мыши (Drag&amp;Drop)из &quot;Проводника&quot; (или других программ)...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru