Java Graphics Pictures

311
20 июня 2017, 23:40

Здравствуйте! Пишу игру, добавляю 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) {
    }
}
READ ALSO
Сохранение boolean в SharedPreferences

Сохранение boolean в SharedPreferences

В активити есть два элемента CheckBox, значение которых я сохраняю в SharedPreferencesВозникла проблема - при изменении одного из них, изменяется записанное...

360
Как учесть обновление приложения?

Как учесть обновление приложения?

Собираюсь выложить приложение на PlayMarket, с последующим его обновлением

237
Как передать коллекцию из Thymeleaf в контроллер?

Как передать коллекцию из Thymeleaf в контроллер?

Добрый день возникла такая проблема

351