Witam. Jeśli zaśmiecam to sory ale potrzebuje tego na wczoraj na zaliczenie. Piszę snake i wszystko było ok dopóki nie chciałem dodać jakiego panelu kontrolnego. Po dodaniu nowego panelu i wciśnięciu na nim przycisku Kaylistener przestaje reagować. Poniżej umieszczam szkielet programu. Z góry dzięki za pomoc.
package test;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test extends JFrame{
private final int WIDTH = 1000;
private final int HEIGHT = 800;
private Board board;
private ControlPanel controlPanel;
private JButton startGame;
public Test(){
super("Snake");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setPreferredSize(new Dimension(WIDTH+40, HEIGHT+30));
setLayout(new BorderLayout(20,20));
board = new Board(WIDTH, HEIGHT);
add(board, BorderLayout.WEST);
controlPanel = new ControlPanel();
add(controlPanel, BorderLayout.EAST);
setVisible(true);
pack();
}
public static void main(String[] args) {
new Test();
}
}
package test;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ControlPanel extends JPanel{
private static final int WIDTH = 230, HEIGHT = 500;
private final JLabel scoreTxt;
private JLabel score;
public JButton startGame;
public void setScore(String score){
this.score.setText(score);
}
public ControlPanel(){
setFocusable(true);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setLayout(null);
setBorder(BorderFactory.createTitledBorder("Control panel"));
scoreTxt = new JLabel("Score: ");
scoreTxt.setBounds(30, 20, 50, 30);
add(scoreTxt);
score = new JLabel("0");
score.setBounds(100, 20, 100, 30);
add(score);
startGame = new JButton("start game");
startGame.setBounds(30, 70, 170, 35);
add(startGame);
setVisible(true);
}
}
package test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
public class Board extends JPanel{
private final int WIDTH, HEIGHT;
private final int SIZE = 10;
private boolean up = false, down = false, right = true, left = false;
private Key key;
public Board(int width, int height){
setFocusable(true);
setLayout(new GridLayout(1,1,0,0));
setPreferredSize(new Dimension(800, 800));
this.WIDTH = width;
this.HEIGHT = height;
key = new Key();
addKeyListener(key);
}
@Override
protected void paintComponent(Graphics g){
g.clearRect(0, 0, WIDTH, HEIGHT);
for(int i = 0; i < (WIDTH)/SIZE ; ++i){
g.drawLine(i*SIZE, 0, i*SIZE, HEIGHT);
}
for(int i = 0; i < HEIGHT/SIZE; ++i){
g.drawLine(0, i*SIZE, WIDTH, i*SIZE);
}
}
private class Key implements KeyListener{
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if(key == KeyEvent.VK_RIGHT && !left){
up = false;
down = false;
right = true;
System.out.println("dfgbdgfb");
}
if(key == KeyEvent.VK_LEFT && !right){
up = false;
down = false;
left = true;
System.out.println("dfgbdgfb");
}
if(key == KeyEvent.VK_UP && !down){
left = false;
right = false;
up = true;
System.out.println("dfgbdgfb");
}
if(key == KeyEvent.VK_DOWN && !up){
left = false;
right = false;
down = true;
System.out.println("dfgbdgfb");
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
}