Абсолютное позиционирование изображения иконки в java swing - PullRequest
0 голосов
/ 25 апреля 2018

Итак, я пытаюсь написать для своего проекта битву покемонов между 3 разными покемонами, используя java swing. Однако часть, которая останавливает меня - это анимация. Я попытался использовать нулевую разметку с setLocation, чтобы я мог перемещать изображения на основе таймера, но проблема, как вы, наверное, знаете, в том, что изображения не будут отображаться в нулевой разметке. Есть ли в любом случае изменить его, чтобы он работал таким образом. Так я объявил свои фотографии

java.net.URL torterraPic = getClass().getResource("torterra-1.gif");

ImageIcon torterra = new ImageIcon(new ImageIcon(torterraPic).getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT));

затем я помещаю свой значок изображения в JLabel, который добавляю в рамку, а затем делаю setLocation, чтобы выбрать, куда он идет.

Я понимаю, что не рекомендуется использовать абсолютное позиционирование, но я чувствую, что это лучший способ сделать это (при условии, что возможно добавить изображение), потому что таким образом я могу манипулировать setLocation, чтобы он двигался вверх во время атака. Я попытался использовать gridbag и grid layout, чтобы попытаться сделать это, но ни один из них не так удобен для меня.

Так что, если есть какой-то способ сделать эту тренировку, пожалуйста, скажите мне. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Нет необходимости использовать нулевые макеты и абсолютное позиционирование компонента, поскольку ваши спрайты изображения не должны быть JLabels или другими компонентами, а должны создавать спрайты BufferedImage, а затем рисовать их в одном методе рисования JPanel paintComponent, как описано в учебниках по рисованию - Урок: выполнение заказной живописи .

Сначала нарисуйте фоновое изображение (изображения) в статическом положении, а затем переместите положение спрайтов с помощью g.drawImage(...) переопределить параметры x и y. Управляйте анимацией с помощью Swing Timer, который использует ActionListener или других слушателей, таких как привязки клавиш.

0 голосов
/ 25 апреля 2018

Я попытался использовать нулевую разметку с setLocation, чтобы я мог перемещать изображения на основе таймера, но проблема, как вы, наверное, знаете, в том, что изображения не будут отображаться в нулевой разметке.

Да, они будут, но теперь вы несете ответственность за выполнение функций менеджера компоновки, что означает, что вам нужно установить местоположение и size метки.

Обычно вы делаете что-то вроде:

label.setIcon(...);
label.setSize( label.getPreferredSize() ):
label.setLocation(...);

Затем в анимации вы просто меняете местоположение по своему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...