Здравствуйте! Пишу игру, добавляю 2 картинку в JFrame
- подставка, картошка. Всегда отображается по разному. То ли только картошка, то ли только подставка.
Как исправить,чтобы отображалось все вместе? И еще мне нужно где-то вызвать this.repaint()
но я не понимаю где. Код ниже.
Game
public class Game { // главный класс
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("GetFruit");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(700,500);
frame.setResizable(false);
Stand stand = new Stand();
KeyboardObserver observer = new KeyboardObserver(stand);
frame.addKeyListener(observer);
frame.add(stand);
Potato potato = new Potato();
frame.add(potato);
}
}
Stand
public class Stand extends JPanel{ // Подставка
private StandDirection direction;
private BufferedImage image;
public Stand(){
try {
image = ImageIO.read(new File("src\\images\\p.jpg"));
} catch (IOException e) {
System.out.println("Неверный путь к изображению.");
}
}
public void setDirection(StandDirection direction) {
this.repaint();
this.direction = direction;
}
public StandDirection getDirection() {
return direction;
}
private int x = 250;
private int y = 350;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (this.getDirection() == StandDirection.LEFT) {
x -= 25;
if(this.x <0 ){
x+= 25;
}
} else if (this.getDirection() == StandDirection.RIGHT) {
x += 25;
if(this.x > 495){
x -= 25;
}
}
g.drawImage(image, x, y, null);
}
}
Potato
public class Potato extends JPanel{ // Картошка
private BufferedImage image;
private int x = (int)(Math.random() * 486); // генерируем случайный x
private int y = 100;
public Potato(){
try {
image = ImageIO.read(new File("src\\images\\potato.jpg"));
} catch (IOException e) {
System.out.println("Неверный путь к изображению.");
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image,x,y,null);
y += 50;
//this.repaint();
}
}
StandDirection
public enum StandDirection { // enum со значениями
LEFT,
RIGHT
}
KeyboardObserver
public class KeyboardObserver implements KeyListener{ // Отслеживает нажатия клавиш
private Stand stand;
public KeyboardObserver(Stand stand) {
this.stand = stand;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_LEFT){
stand.setDirection(StandDirection.LEFT);
}else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
stand.setDirection(StandDirection.RIGHT);
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В активити есть два элемента CheckBox, значение которых я сохраняю в SharedPreferencesВозникла проблема - при изменении одного из них, изменяется записанное...
Собираюсь выложить приложение на PlayMarket, с последующим его обновлением