Hi, ich möchte mit Java einen Ball in einem JPanel mit der A und Enter Taste bewegen bzw die Farbe ändern etc. In der Schule hatten wir dafür ein Packet namens StiftundCo. Nun möchte ich es aber mit graphics machen, doch der KeyListener funktioniert nicht wenn ich ihn in einen JFrame packe. Kann mir vlt einer helfen?
Zeichenpanel.java <- Kreis und Ereignisanwendungen.
NewClass.java <-Frame damit wenigstens der Kreis richtig angezeigt wird sonst sieht man garnichts.
Kreis.java
Zeichenpanel.java <- Kreis und Ereignisanwendungen.
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
public class ZeichenPanel extends JPanel implements KeyListener{
private Kreis kreis;
private int xPos=100;
private int yPos=100;
public ZeichenPanel(){
super();
this.addKeyListener(this);
kreis=new Kreis();
}
public void paint(Graphics g){
kreis.zeichne(g);
}
public void keyTyped(KeyEvent e) {
int quelle= e.getKeyCode();
if(quelle==KeyEvent.VK_ENTER){
kreis.setPosition(xPos+10, yPos+10);
kreis.setFarbe(Color.red);
repaint();
}
if(quelle==KeyEvent.VK_A)
{
kreis.setPosition(xPos+10, yPos+10);
repaint();
}
System.out.println();
}
public void keyPressed(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
Java:
import java.awt.*;
import java.awt.event.KeyEvent;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.event.KeyListener;
public class NewClass extends JFrame{
private Kreis kreis;
private int xPos=100;
private int yPos=100;
JPanel jp;
public NewClass(){
super();
kreis=new Kreis();
setBackground(Color.white);
setBounds(0, 0, 600, 600);
setVisible(true);
jp=new ZeichenPanel();
add(jp);
}
}
Kreis.java
Java:
import java.awt.Color;
import java.awt.Graphics;
import stiftUndCo.*;
public class Kreis{
// Attribute
private int radius;
private int xPos;
private int yPos;
private Color farbe;
private Stift stift;
// Konstruktor
public Kreis() {
xPos=10;
yPos=10;
farbe = Color.black;
stift=new Stift();
radius = 50;
}
public void zeichne (Graphics g) {
// Setzten der Zeichenfarbe auf Rot
g.setColor (farbe);
// Zeichen eines gefüllten Kreises
g.fillOval (xPos, yPos, radius, radius);
}
// Methoden
/**
* Der Radius des Kreises wird neu festgelegt.
* Der alte Kreis wird vorher nicht automatisch geloescht,
* der neue Kreis wird nachher nicht automatisch gezeichnet.
* @param pRadius (neuer Radius des Kreises)
*/
public void setRadius(int pRadius) {
radius = pRadius;
}
public double getRadius() {
return radius;
}
/**
* Der Kreis wird gezeichnet.
*/
public void setPosition(int pX, int pY) {
xPos=pX;
yPos=pY;
}
public void setFarbe(Color pFarbe) {
farbe=pFarbe;
}
/**
* Die x-Koordinate des linken oberen Eckpunkts wird zurŸckgegeben.
*/
public double getX() {
return xPos;
}
/**
* Die y-Koordinate des linken oberen Eckpunkts wird zurŸckgegeben.
*/
public double getY() {
return yPos;
}
public void loeschen(Graphics g) {
g.setColor(Color.white);
g.fillOval(xPos, yPos, radius, radius);
}
}