Estoy tratando de hacer que se mueva una pelota en un frame, pero quiero que se comience a mover después de presionar la tecla 1 que está dentro del case.
Esta clase es para poder llamar el método que mueve la pelota, pero el problema es que se ejecuta desde el main en la clase principal, y no puedo sacar el main de esa clase.
public class Funciones extends JPanel{
public Funciones() {
KeyListener listener = new MyKeyListener();
addKeyListener(listener);
setFocusable(true);
}
public class MyKeyListener implements KeyListener {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int tecla = e.getKeyCode();
if(tecla==49)
{
tecla = 1;
}
switch(tecla){
case 1:
}
}
@Override
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
}
Esta es la clase principal y la que permite que se ejecute automáticamente la ventana sin dejar que presione un botón para poder ejecutar esa ventana:
public class Principal2 extends JFrame implements Runnable{
public void paint (Graphics g)
{
super.paint(g);
g.setColor (Color.black);
g.fillOval (PosX-radioPelota, PosY-radioPelota, radioPelota*2, radioPelota*2);
}
int PosX=60,PosY=184; //Posición de la pelota
int DirX=PosX % 10 +5; //Dirección de la pelota
int DirY=PosY % 10 +1; //Dirección de la pelota
int radioPelota=35; //Radio de la pelota
Thread hilo;
public void start()
{
if(hilo== null)
{
hilo= new Thread(this);
hilo.start();
}
}
public void run()
{
while(true)
{
mover(); //Función que mueve la pelota
repaint();
try { Thread.sleep(10);
} catch (InterruptedException exc) { }
}
}
public void mover()
{
PosX+=DirX;
PosY+=DirY;
//Controlo que cuando toca el borde, cambie de direccion
if ((PosX-radioPelota) <= 0)
DirX*= -1;
else if ((PosX+radioPelota) >= getWidth())
DirX*= -1;
if ((PosY-radioPelota) <= 0)
DirY*= -1;
else if ((PosY+radioPelota) >= getHeight())
DirY*= -1;
}
public static void main(String[] args) {
Principal2 p = new Principal2();
p.setSize(640, 480);
p.setVisible(true);
p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p.start();
}
}