Я хочу запустить класс змей после того, как кнопка пуска нажата, программа работает до тех пор, пока я не нажму кнопку пуска и не попытаюсь переместить прямоугольник вокруг окна, есть проблема, при которой прямоугольник вообще не будет двигаться.Пожалуйста помоги.Спасибо.
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) {}
}