Servus, ich habe das Problem, dass ich einen KeyLIstner in meiner Main hinzugefügt habe, genau so wie einen MouseListner, das Problem ist, dass der MouseListner funktioniert und der KeyListner nicht und ich verstehe nicht wieso....
Main:
Panel:
KeyHandler:
Mousehandler(zum Vergleich):
Sorry, dass das so viel code ist, ich weiß aber echt nicht, was das Problem ist und wieso nichts passiert, wenn ich eine Taste drücke...
Würde mich trotzdem freuen, wenn mir jemand bei dem Problem helfen könnte.
Main:
Java:
package Gui;
import java.awt.Point;
import java.awt.Toolkit;
import javax.swing.*;
import Actions.*;
import Animations.GameTimer;
import Animations.HuhnFlugAnimationTimer;
import Animations.HuhnFlugTimer;
import Animations.HuhnTimer;
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
public static Panel panel;
public static void main(String[] args) {
new Main();
}
public Main() {
panel = new Panel();
setSize(1000,743);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(null);
setLocationRelativeTo(null);
setResizable(false);
requestFocus();
addMouseListener(new MouseHandler(panel));
addKeyListener(new KeyHandler(panel));
add(panel);
try {
ImageIcon icon = new ImageIcon("rsc/zielen.png");
setCursor(Toolkit.getDefaultToolkit().createCustomCursor(icon.getImage(),new Point(0,0),"custom cursor"));
} catch(Exception e) {System.out.println("ERROR! BILD FÜR MOUSECURSOR KONNTE NICHT GELADEN WERDEN!"); }
Main.startTime();
setVisible(true);
}
public static void startTime() {
new GameTimer(panel, 119);
new HuhnTimer(panel);
new HuhnFlugTimer(panel);
new HuhnFlugAnimationTimer(panel);
}
}
Java:
package Gui;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.*;
import Actions.ImageLoader;
import Actions.SetDefault;
import Actions.Stats;
import Actions.StatsChange;
public class Panel extends JPanel {
private static final long serialVersionUID = 1L;
private int move = 15;
private boolean ingame = true, laden = false;
private int schussNr = 4, punkte = 0;
private int xhe3 = -1100;
private int schuss = 0, treffer = 0;
public ArrayList<ImageLoader> il = new ArrayList<ImageLoader>();
public ArrayList<ImageLoader> he3 = new ArrayList<ImageLoader>();
private JLabel points;
private JButton newGame;
private JTextField newName;
public Panel() {
setSize(1000,743);
setLayout(null);
setVisible(true);
initializeIL();
repaint();
points = new JLabel("Punkte: " + punkte);
points.setBounds(790,10,200,40);
points.setFont(new Font("Arial",Font.BOLD,25));
points.setVisible(true);
add(points);
newGame = new JButton("Neues Spiel");
newGame.setFont(new Font("Arial", Font.BOLD, 20));
newGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new SetDefault(Main.panel);
newGame.setVisible(false);
}
});
newGame.setBounds(400,570,200,50);
newGame.setVisible(false);
add(newGame);
try {
new Stats();
} catch (IOException e) {
e.printStackTrace();
}
newName = new JTextField();
newName.setFont(new Font("Arial", Font.BOLD, 30));
newName.setBackground(new Color(220,220,220));
add(newName);
}
public void initializeIL() {
il.add(0, new ImageLoader(-1000, 0, 0, "rsc/MHBGE3.png", 3000, 743, "bgEbene3"));
il.add(1, new ImageLoader(-1000, 0, 0, "rsc/MHBGE2.png", 3000, 743, "bgEbene2"));
il.add(2, new ImageLoader(-1000, 0, 0, "rsc/MHBGE1.png", 3000, 743, "bgEbene1"));
il.add(3, new ImageLoader(-650, -45, 0, "rsc/Mühle.png", 600, 600, "mühlrad"));
for(int i = 4; i < 10; i++) {
int x = -900,y = 550,maxy = 480;
if(i == 5) { x = -600; y = 490; maxy = 420; }
else if(i == 6) { x = -100; y = 470; maxy = 400; }
else if(i == 7) { x = 400; y = 465; maxy = 395; }
else if(i == 8) { x = 1000; y = 440; maxy = 370; }
else if(i == 9) { x = 1600; y = 380; maxy = 310; }
il.add(i, new ImageLoader(x, y, maxy, "rsc/Moorhuhn1.png", 40, 60, "huhnEbene2"));
}
int xs[] = {10,45,80,115,150};
for(int i = 10; i < 15; i++) {
il.add(i, new ImageLoader(xs[i-10], 650, 650, "rsc/shotpat.png", 25, 50, "patrone"));
}
for(int i = 15; i < 20; i++) {
int x = -800; int y = 590; int maxy = 490;
if(i == 16) { x = 200; y = 700; maxy = 600; }
else if(i == 17) { x = 600; y = 650; maxy = 550; }
else if(i == 18) { x = 1300; y = 660; maxy = 560; }
else if(i == 19) { x = 1800; y = 620; maxy = 520; }
il.add(i, new ImageLoader(x, y, maxy, "rsc/Moorhuhn2.png", 60, 100, "huhnEbene1"));
}
for(int i = 0; i < 20; i++) {
int w = (int)(Math.random()*400) + 300;
he3.add(i,new ImageLoader(xhe3, ((int)(Math.random()*100)+150), 2100, 50, 25, "rsc/Moorhuhn3_1.png", "huhnEbene3_1"));
xhe3 = xhe3 - w - 400;
//System.out.println(xhe3);
}
}
public void paintComponent(Graphics g) {
g.drawImage(il.get(0).getImage(), il.get(0).getX(), il.get(0).getY(), il.get(0).getWidth(), il.get(0).getHeight(), null);
for(int i = 4; i < 10; i++) {
g.drawImage(il.get(i).getImage(), il.get(i).getX(), il.get(i).getY(), il.get(i).getWidth(), il.get(i).getHeight(), null);
g.setColor(Color.RED);
g.drawLine(il.get(i).getX(), il.get(i).getY(), il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY());
g.drawLine(il.get(i).getX(), il.get(i).getY()+il.get(i).getHeight(), il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY()+il.get(i).getHeight());
g.drawLine(il.get(i).getX(), il.get(i).getY(), il.get(i).getX(), il.get(i).getY()+il.get(i).getHeight());
g.drawLine(il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY(), il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY()+il.get(i).getHeight());
}
for(int i = 0; i < he3.size(); i++) {
g.drawImage(he3.get(i).getImage(), he3.get(i).getX(), he3.get(i).getY(), he3.get(i).getWidth(), he3.get(i).getHeight(), null);
g.setColor(Color.RED);
g.drawLine(he3.get(i).getX(), he3.get(i).getY(), he3.get(i).getX()+he3.get(i).getWidth(), he3.get(i).getY());
g.drawLine(he3.get(i).getX(), he3.get(i).getY()+he3.get(i).getHeight(), he3.get(i).getX()+he3.get(i).getWidth(), he3.get(i).getY()+he3.get(i).getHeight());
g.drawLine(he3.get(i).getX(), he3.get(i).getY(), he3.get(i).getX(), he3.get(i).getY()+he3.get(i).getHeight());
g.drawLine(he3.get(i).getX()+he3.get(i).getWidth(), he3.get(i).getY(), he3.get(i).getX()+he3.get(i).getWidth(), he3.get(i).getY()+he3.get(i).getHeight());
}
g.drawImage(il.get(1).getImage(), il.get(1).getX(), il.get(1).getY(), il.get(1).getWidth(), il.get(1).getHeight(), null);
for(int i = 15; i < 20; i++) {
g.drawImage(il.get(i).getImage(), il.get(i).getX(), il.get(i).getY(), il.get(i).getWidth(), il.get(i).getHeight(), null);
g.setColor(Color.RED);
g.drawLine(il.get(i).getX(), il.get(i).getY(), il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY());
g.drawLine(il.get(i).getX(), il.get(i).getY()+il.get(i).getHeight(), il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY()+il.get(i).getHeight());
g.drawLine(il.get(i).getX(), il.get(i).getY(), il.get(i).getX(), il.get(i).getY()+il.get(i).getHeight());
g.drawLine(il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY(), il.get(i).getX()+il.get(i).getWidth(), il.get(i).getY()+il.get(i).getHeight());
}
g.drawImage(il.get(2).getImage(), il.get(2).getX(), il.get(2).getY(), il.get(2).getWidth(), il.get(2).getHeight(), null);
g.drawImage(il.get(3).getImage(), il.get(3).getX(), il.get(3).getY(), il.get(3).getWidth(), il.get(3).getHeight(), null);
for(int i = 10; i < 15; i++) {
g.drawImage(il.get(i).getImage(), il.get(i).getX(), il.get(i).getY(), il.get(i).getWidth(), il.get(i).getHeight(), null);
}
if(ingame == true) {
if(laden == true) {
g.setColor(Color.RED);
g.setFont(new Font("Impact", Font.BOLD, 30));
g.drawString("Keine Munition", 380, 360);
}
}
if(ingame == false) {
g.setColor(new Color(0, 0, 0, 200));
g.fillRect(70, 70, 860, 590);
g.setFont(new Font("Arial", Font.BOLD, 30));
g.setColor(Color.WHITE);
g.drawString("Punkte: " + punkte, 180, 180);
g.drawString("Schüsse: " + schuss, 600, 180);
g.drawString("Treffer: " + treffer, 600, 220);
double q;
int quote;
if(treffer > 0 && schuss > 0) { q = ((double)treffer / (double)schuss) * 100;
} else { q = 0; }
quote = (int)q;
g.drawString("Trefferquote: " + quote + "%", 180, 220);
newGame.setVisible(true);
if(punkte > Integer.parseInt(Stats.stats.get(4))) {
try {new StatsChange(punkte, ""); } catch (IOException e) { e.printStackTrace(); }
g.drawString("1)", 180, 320);
g.drawString("2)", 180, 390);
g.drawString("3)", 180, 460);
g.drawString(Stats.stats.get(0)+" Punkte", 240, 320);
g.drawString(Stats.stats.get(2)+" Punkte", 240, 390);
g.drawString(Stats.stats.get(4)+" Punkte", 240, 460);
if(StatsChange.newPointsPos == 0) {
newName.setVisible(true);
newName.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
newName.setVisible(false);
Stats.stats.set(1, newName.getText());
newName.setText("");
g.drawString(Stats.stats.get(1), 500, 320);
System.out.println(Stats.stats.get(1));
}
});
newName.setBounds(500,290,350,50);
g.drawString(Stats.stats.get(3), 500, 390);
g.drawString(Stats.stats.get(5), 500, 460);
} else if(StatsChange.newPointsPos == 2) {
newName.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
newName.setVisible(false);
Stats.stats.set(3, newName.getText());
newName.setText("");
g.drawString(Stats.stats.get(3), 500, 390);
}
});
newName.setBounds(500,360,350,50);
newName.setVisible(true);
g.drawString(Stats.stats.get(1), 500, 320);
g.drawString(Stats.stats.get(5), 500, 460);
} else if(StatsChange.newPointsPos == 4) {
newName.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
newName.setVisible(false);
Stats.stats.set(5, newName.getText());
newName.setText("");
g.drawString(Stats.stats.get(5), 500, 460);
}
});
newName.setBounds(500,430,350,50);
newName.setVisible(true);
g.drawString(Stats.stats.get(1), 500, 320);
g.drawString(Stats.stats.get(3), 500, 390);
}
} else {
g.drawString("1)", 180, 320);
g.drawString("2)", 180, 390);
g.drawString("3)", 180, 460);
g.drawString(Stats.stats.get(0)+" Punkte", 240, 320);
g.drawString(Stats.stats.get(2)+" Punkte", 240, 390);
g.drawString(Stats.stats.get(4)+" Punkte", 240, 460);
g.drawString(Stats.stats.get(1), 500, 320);
g.drawString(Stats.stats.get(3), 500, 390);
g.drawString(Stats.stats.get(5), 500, 460);
}
}
}
public void setIngame(boolean i) { ingame = i; }
public boolean getIngame() { return ingame; }
public void setLaden(boolean i) { laden = i; }
public boolean getLaden() { return laden; }
public int getMoveInt() { return move; }
public int getSchussNr() { return schussNr; }
public void setSchussNr(int i) { schussNr = i; }
public int getpunkte() { return punkte; }
public void setPunkte(int i) { punkte += i; }
public void pointsSetText(int p) { points.setText("Punkte: " + p); }
public int getPoints() { return punkte; }
public void setPoints(int p) { punkte = p; }
public void setXhe3(int i) { xhe3 = i; }
public int getXhe3() { return xhe3; }
public void setSchuss(int i) { schuss = i; }
public int getSchuss() { return schuss; }
public void setTreffer(int i) { treffer = i; }
public int getTreffer() { return treffer; }
public void newNameInvisible() {
newName.setVisible(false);
}
public void moveLeft() {
for(int i = 0; i < 10; i++) {
il.get(i).setX(il.get(i).getX() + getMoveInt());
}
for(int i = 15; i < il.size(); i++) {
il.get(i).setX(il.get(i).getX() + getMoveInt());
}
for(int i = 0; i < he3.size(); i++) {
he3.get(i).setX(he3.get(i).getX() + getMoveInt());
}
repaint();
}
public void moveRight() {
for(int i = 0; i < 10; i++) {
il.get(i).setX(il.get(i).getX() - getMoveInt());
}
for(int i = 15; i < il.size(); i++) {
il.get(i).setX(il.get(i).getX() - getMoveInt());
}
for(int i = 0; i < he3.size(); i++) {
he3.get(i).setX(he3.get(i).getX() - getMoveInt());
}
repaint();
}
}
Java:
package Actions;
import java.awt.event.*;
import Gui.Panel;
public class KeyHandler implements KeyListener {
private Panel p;
public KeyHandler(Panel panel) {
p = panel;
}
@Override
public void keyPressed(KeyEvent e) {
if(p.getIngame() == true) {
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
if(p.il.get(0).getX() <= 0){
p.moveLeft();
p.repaint();
}
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
if(p.il.get(0).getX() >= -2000){
p.moveRight();
}
}
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
Mousehandler(zum Vergleich):
Java:
package Actions;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.SwingUtilities;
import Animations.Sound;
import Gui.Panel;
public class MouseHandler implements MouseListener {
private Panel p;
private int mx, my;
public MouseHandler(Panel panel) {
p = panel;
}
@Override
public void mouseClicked(MouseEvent e) {
mx = e.getX() + 6;
my = e.getY() - 15;
if(p.getIngame() == true) {
if(SwingUtilities.isLeftMouseButton(e)) {
if(p.getSchussNr() >= 0) {
new Sound("sounds/shot.wav");
p.il.get(p.getSchussNr()+10).setImage("rsc/shotpatused.png");
p.setSchussNr(p.getSchussNr() - 1);
p.setSchuss(p.getSchuss()+1);
//Überprüfe ob HuhnEbene2 getroffen wird
for(int i = 4; i < 10; i++) {
if(p.il.get(i).getIsHit() == false ) {
if(mx > p.il.get(i).getX() && mx < p.il.get(i).getX()+p.il.get(i).getWidth() && my > p.il.get(i).getY() && my < p.il.get(i).getY()+p.il.get(i).getHeight() && my <= p.il.get(i).getMaxY()+p.il.get(i).getHeight()) {
p.setPoints(p.getPoints()+10); //Setze die Punkte
p.pointsSetText(p.getPoints()); //aktualisiere die Punktezahl
p.il.get(i).setIsHit(true); //setze isHit aus der Klasse ImageLoader auf true
p.il.get(i).setImage("rsc/Moorhuhn1tot.png"); //ändere Huhn-Bild zu totem Huhn
new Sound("sounds/huhn_die.wav"); //Sound Huhn stirbt
p.setTreffer(p.getTreffer()+1);
}
}
}
//Überprüfe ob HuhnEbene1 getroffen wird
for(int i = 15; i < 20; i++) {
if(p.il.get(i).getIsHit() == false ) {
if(mx > p.il.get(i).getX() && mx < p.il.get(i).getX()+p.il.get(i).getWidth() && my > p.il.get(i).getY() && my < p.il.get(i).getY()+p.il.get(i).getHeight() && p.il.get(i).getY() <= p.il.get(i).getMaxY()+p.il.get(i).getHeight()) {
p.setPoints(p.getPoints()+5); //Setze die Punkte
p.pointsSetText(p.getPoints()); //aktualisiere die Punktezahl
p.il.get(i).setIsHit(true); //setze isHit aus der Klasse ImageLoader auf true
p.il.get(i).setImage("rsc/Moorhuhn2tot.png"); //ändere Huhn-Bild zu totem Huhn
new Sound("sounds/huhn_die.wav"); //Sound Huhn stirbt
p.setTreffer(p.getTreffer()+1);
}
}
}
//Überprüfe ob HuhnEbene3 getroffen wird
for(int i = 0; i < p.he3.size(); i++) {
if(p.il.get(i).getIsHit() == false ) {
if(mx > p.he3.get(i).getX() && mx < p.he3.get(i).getX()+p.he3.get(i).getWidth() && my > p.he3.get(i).getY() && my < p.he3.get(i).getY()+p.he3.get(i).getHeight() && p.he3.get(i).getY() == p.he3.get(i).getMaxY()) {
p.setPoints(p.getPoints()+25); //Setze die Punkte
p.pointsSetText(p.getPoints()); //aktualisiere die Punktezahl
p.he3.get(i).setIsHit(true); //setze isHit aus der Klasse ImageLoader auf true
new Sound("sounds/huhn_die.wav"); //Sound Huhn stirbt
p.setTreffer(p.getTreffer()+1);
}
}
}
} else {
p.setLaden(true);
}
} else if(SwingUtilities.isRightMouseButton(e)) {
p.setLaden(false);
p.setSchussNr(4);
new Sound("sounds/pistole laden.wav");
for(int i = 10; i < 15; i++) {
p.il.get(i).setImage("rsc/shotpat.png");
}
}
p.repaint();
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
Sorry, dass das so viel code ist, ich weiß aber echt nicht, was das Problem ist und wieso nichts passiert, wenn ich eine Taste drücke...
Würde mich trotzdem freuen, wenn mir jemand bei dem Problem helfen könnte.