ich hänge seit gestern Abend, bis jetzt ohne jeglichen Erfolg , an dem Problem, dass ein JFrame einfach nicht auf Tastatureingaben reagieren will. Ich hab das ganze schon mehrmals überprüft und Alternativen getestet aber weder das noch googeln hat mir bis jetzt geholfen, deshalb wende ich mich jetzt mal an euch
private level currentLVL;
private JFileChooser fileChooser;
private punkt scale;
public String getFile(boolean forSaving)
{
fileChooser=new JFileChooser("Level laden...");
fileChooser.setFileFilter(new FileFilter()
{
@Override public boolean accept(File f)
{
return f.isDirectory() ||
f.getName().toLowerCase().endsWith( level.end );
}
@Override public String getDes*****ion()
{
return "Level für Snake";
}
}
);
fileChooser.setCurrentDirectory(new File(level.standard + level.end));
int state;
if (!forSaving)
state = fileChooser.showOpenDialog( null );
else
state = fileChooser.showSaveDialog( null );
if ( state == JFileChooser.APPROVE_OPTION )
{
String sg=fileChooser.getSelectedFile().toString();
if (sg.endsWith(level.end))
return sg;
else return sg + level.end;
}
else return level.standard + level.end;
}
private boolean getMul()
{
switch(JOptionPane.showConfirmDialog(null, "Wird's ein Level für Einzelspieler?", "deine Mutter", JOptionPane.YES_NO_OPTION))
{
case 0: return false;
case 1: return true;
default: return false;
}
}
private punkt getScale()
{
return new punkt(java.lang.Integer.parseInt(JOptionPane.showInputDialog("Länge des Felds")),java.lang.Integer.parseInt(JOptionPane.showInputDialog("Höhe des Felds")));
}
public editor()
{
switch(JOptionPane.showConfirmDialog(null, "Möchten Sie ein Level bearbeiten?", "Laden", JOptionPane.YES_NO_OPTION))
{
case 0: currentLVL=new level(new File(getFile(false))); break;
case 1: scale=getScale(); currentLVL=new level(scale.x, scale.y, getMul()); break;
default: scale=getScale(); currentLVL=new level(scale.x, scale.y, getMul());
}
}
public level getLVL()
{return currentLVL;}
@Override public void mouseExited(MouseEvent em)
{
}
@Override public void mouseEntered(MouseEvent em)
{
}
@Override public void mouseReleased(MouseEvent em)
{
}
@Override public void mousePressed(MouseEvent em)
{
switch(em.getButton())
{
case MouseEvent.BUTTON1:
currentLVL.toggleWall((em.getX()-5)/20,(em.getY()-24)/20); break;
case MouseEvent.BUTTON2: ;
case MouseEvent.BUTTON3:
if (em.getClickCount()==2)
{
currentLVL.setSpawn((em.getX()-5)/20,(em.getY()-24)/20 , 2); break;
}
else
{
currentLVL.setSpawn((em.getX()-5)/20,(em.getY()-24)/20 , 1); break;
}
default: ;
}
}
@Override public void mouseClicked(MouseEvent em)
{
}
@Override public void keyReleased(KeyEvent e)
{
System.err.println("||");
}
@Override public void keyPressed(KeyEvent e)
{
System.err.println("||");
}
@Override public void keyTyped(KeyEvent e)
{
System.err.println("||");
switch(e.getKeyCode())
{
case KeyEvent.VK_UP: currentLVL.setDir(2,1);break;
case KeyEvent.VK_DOWN: currentLVL.setDir(4,1);break;
case KeyEvent.VK_RIGHT: currentLVL.setDir(3,1);break;
case KeyEvent.VK_LEFT: currentLVL.setDir(1,1);break;
case KeyEvent.VK_W: currentLVL.setDir(2,2);break;
case KeyEvent.VK_A: currentLVL.setDir(1,2);break;
case KeyEvent.VK_S: currentLVL.setDir(4,2);break;
case KeyEvent.VK_D: currentLVL.setDir(3,2);break;
}
}
@Override public void paint(Graphics gr)
{
for (int o=0; o<level.height; o++)
{
for (int i=0; i<level.width; i++)
{
if (currentLVL.isWall(new punkt(i,o))) gr.fillRect(i*20, o*20, 20, 20);
}
}
gr.drawRect(currentLVL.getSpawn(1).x*20,currentLVL.getSpawn(1).y*20,20,20);
switch(currentLVL.getDir(1))
{
case 1: gr.drawRect((currentLVL.getSpawn(1).x - 1)*20,currentLVL.getSpawn(1).y*20,20,20);break;
case 2: gr.drawRect(currentLVL.getSpawn(1).x*20,(currentLVL.getSpawn(1).y - 1)*20,20,20);break;
case 3: gr.drawRect((currentLVL.getSpawn(1).x + 1)*20,currentLVL.getSpawn(1).y*20,20,20);break;
case 4: gr.drawRect(currentLVL.getSpawn(1).x*20,(currentLVL.getSpawn(1).y + 1)*20,20,20);
}
if (currentLVL.isMulti())
{
gr.drawRect(currentLVL.getSpawn(2).x*20,currentLVL.getSpawn(2).y*20,20,20);
switch(currentLVL.getDir(2))
{
case 1: gr.drawRect((currentLVL.getSpawn(2).x - 1)*20,currentLVL.getSpawn(2).y*20,20,20);break;
case 2: gr.drawRect(currentLVL.getSpawn(2).x*20,(currentLVL.getSpawn(2).y - 1)*20,20,20);break;
case 3: gr.drawRect((currentLVL.getSpawn(2).x + 1)*20,currentLVL.getSpawn(2).y*20,20,20);break;
case 4: gr.drawRect(currentLVL.getSpawn(2).x*20,(currentLVL.getSpawn(2).y + 1)*20,20,20);
}
}
}
}
Sachen, die mit dem Problem nicht zu tun haben, hab ich einfach mal gespoilert.
Durch
Code:
System.err.println("||");
wollte ich einfach eine Rückmeldung, wenn irgendwas mit einer Taste passiert, bis jetzt ist aber nichts passiert...
Kann mir irgendjemand sagen, warum der KeyListener nicht reagiert?