¿Como me muevo por varios JButton con el teclado?

lingurik
27 de Agosto del 2009
Hola, gracias de antemano por cualquier ayuda.
Mi problema es el siguiente, (a parte de ser novato en Java) he creado una ventana con JWindow, y dentro de esta una matriz con 75 JButton's ( es una matriz por la distribución en pantalla, pero se colocan de forma secuencial).
Cuando los selecciono con el ratón no hay problema, selecciono el que quiero y cambia de color, que de momento me sirve para saber cual se selecciona y luego ya iría poniendo las opciones, pero....
¿Como me muevo por los JButton's con el teclado? este programa lo estoy haciendo en un PC con Windows, y claro está que tengo ratón, pero lo estoy diseñando con una ventana de 800x352 pixeles, que es la resolunción que tiene la pantalla de mi móvil, y por desgracia no tiene ratón.
Si alguien puede decirme como activar el JButton número uno como actual, y luego poder moverme con los cursores para seleccionar con Enter o Space, se lo agradeceré eternamente. Gracias otra vez. El código fuente es el siguiente, es muy sencillo (y seguramente muy, muy mejorable)

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class kirina extends JWindow {

public static void main( String[] args ) throws IOException {
new kirina() ;
int tecla ;
tecla=System.in.read() ;
System.exit( 0 ) ;
}

public kirina() {
this.setSize( 800, 352 ) ;
this.setLocation( 100, 100 ) ;
this.setBackground( Color.white ) ;
int lineas=15, columnas=5;
Object botones[] = new Object[lineas*columnas] ;
int pixelscuadroy=19, pixelscuadrox=19;
int xbase=704, ybase=66;
int x1, y1, x2, y2, posicion;

for( int conta=0; conta < lineas; conta++ ) {
y1=ybase+conta*pixelscuadroy;
for( int conta2=0; conta2 < columnas; conta2++) {
x2=xbase+conta2*pixelscuadrox;
posicion=conta*columnas+conta2 ;
// JButton miboton = new JButton( Integer.toString(posicion) ) ;
JButton miboton = new JButton( "" ) ;
miboton.setSize( pixelscuadrox, pixelscuadroy ) ;
miboton.setLocation( x2, y1 );
miboton.setBackground( Color.yellow ) ;
miboton.setVisible( true ) ;
miboton.setName( Integer.toString( posicion ) ) ;
SeleccionTarea Seleccion = new SeleccionTarea(miboton) ;
miboton.addActionListener(Seleccion) ;
botones[ posicion ] = miboton ;
this.add(miboton) ;
}
}
AreaUno cuadro1 = new AreaUno() ;
// this.getContentPane().add(cuadro1) ;
this.add(cuadro1) ;
this.setVisible( true ) ;
}
}

class SeleccionTarea implements ActionListener {

JButton MiTarea ;

SeleccionTarea (JButton Tarea) {
MiTarea = Tarea ;
}

public void actionPerformed( ActionEvent evt ) {
Color fondo = MiTarea.getBackground() ;
Color actual = Color.yellow ;
// System.out.println( evt.getSource() ) ;
// System.out.println( fondo ) ;
// System.out.println( actual ) ;
if ( fondo == actual ) {
MiTarea.setBackground( Color.blue ) ;
}
else {
MiTarea.setBackground( Color.yellow ) ;
}
MiTarea.repaint() ;
}
}

class AreaUno extends Canvas {
int xbase=703, ybase=65;

public AreaUno() {
// this.setBackground( Color.black ) ;
}

public void paint( Graphics g ) {
g.setColor( Color.black ) ;
g.drawRect(xbase, ybase, 799-xbase, 351-ybase) ;
}
}