Как очистить JPanel перед перерисовкой, запустить другой класс и переместить объект - PullRequest
0 голосов
/ 19 марта 2019

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

public class Main {
public static void main(String [] args) {
MenuScreen MenuScreen = new MenuScreen();
MenuScreen.menuscreen();
}
    }

Класс Screen Menu

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

    public class MenuScreen {

        Snake Snake = new Snake();

    public  void menuscreen () {

            //Window
        final JFrame window = new JFrame();
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(800, 600);
        window.setLocationRelativeTo(null);

            //Panel
        JPanel panel = new JPanel();
        window.getContentPane().add(panel);
        panel.setBackground(Color.BLACK);
        panel.setVisible(true);
        panel.setLayout(null);

            //Title 
        JLabel label = new JLabel("SNAKE");
        panel.add(label);
        label.setBounds(290, 5, 204, 73);
        label.setFont(new Font("Tahoma", Font.BOLD, 60));
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setForeground(Color.RED);
        label.setBackground(Color.red);

            //Buttons
            //start button
        JButton bstart = new JButton ("Start");
        panel.add(bstart);
        bstart.setBounds(424, 200, 70, 60);
        bstart.setVisible(true);

        //start button - run snake on click
        bstart.addActionListener(new ActionListener() 
              {
                public void actionPerformed(ActionEvent e)
            {

            window.getContentPane().removeAll();
            Snake Snake = new Snake();
            window.add(Snake);
            window.repaint();
            window.revalidate();

       }
              });

            //exit button
        JButton bexit = new JButton ("Exit");
        panel.add(bexit);
        bexit.setBounds(290, 200, 70, 60);
        bexit.setVisible(true);
            //exit button - close on click
        bexit.addActionListener(new ActionListener() 
              {
                public void actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
              });

    }
}

Класс Snake, когда я нажимаю на кнопку start, очищает рамку и показывает прямоугольник, но когда я пытаюсь переместить прямоугольник вокругэкран не будет двигаться.

    public class Snake extends JPanel implements ActionListener, KeyListener {
     public void thicks () {}

    public Snake () {

     addKeyListener(this);
     setFocusable(true);
     setFocusTraversalKeysEnabled(false);

    }

    private static final long serialVersionUID = 1L;


    Timer FPS = new Timer( 5, this);
    double x =0 , y = 0, SpeedX = 0, SpeedY = 0;



    public void paint(Graphics g) {
        FPS.start();
        super.paintComponent(g);
        g.setColor(Color.blue);
        Graphics2D graphics  = (Graphics2D) g;

        Rectangle2D rect = new Rectangle2D.Double(x, y, 40, 40);
        graphics.fill(rect);


        }

    public void actionPerformed(ActionEvent e) {    
    if(x < 0 ||  x > 740 ) {
        SpeedX= -SpeedX;
    }

    if(y < 0 || y > 520) {
        SpeedY = -SpeedY;
            }

    x += SpeedX;
    y += SpeedY;
    repaint();
}
public void down() {
        SpeedY = 2;
        SpeedX =  0;

    }

    public void up() {
        SpeedY = -2;
        SpeedX = 0;     
    }

    public void right() {
        SpeedY = 0;
        SpeedX = 2; 

    }

    public void left() {
        SpeedY =  0;
        SpeedX = -2;    
    }

    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();

        if (keyCode == KeyEvent.VK_DOWN) {
            down();
         }

        if(keyCode == KeyEvent.VK_UP) {
            up();
        }

        if(keyCode == KeyEvent.VK_RIGHT) {
            right();
        }

        if(keyCode == KeyEvent.VK_LEFT) {
            left();
        }

    }

    public void keyReleased(KeyEvent e) {}
    public void keyTyped(KeyEvent e) {}

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