bueno habia hecho un applet del juego 3 en raya, un ejercicio de un libro.
en applet funciona muy bien. el tema es que ahora quise pasarlo a JFrame para probar las características de este y ademas introduciendo los conceptos de varias clases (creo que a esto se le llama herencia), soy muy nuevo en esta parte de java.
el juego nuevo tiene clases por separado
-clase "Ejecutable" (el que ejecuta el "programa")
-clase "MainVentana" (acá puse la posición de los botones y la forma de la "ventana"
-clase "Botones" (acá se inicializa los botones de la "ventana" y el menú de pantalla)
-clase "evento" (bueno acá se le da acción a los botones del "programa")
-clase "juego3x3" y "juego 4x4" acá esta todo el funcionamiento del juego)
Bueno esto sale como error:
Cita: Exception in thread "main" java.lang.StackOverflowError;
y me marca como veinte o 30 veces estas misma linea:
Cita: at com.wawanime.JFrame3.tateti.EventosMenu.<init>(Eve ntosMenu.java:10)
at com.wawanime.JFrame3.tateti.BotonesJuego.<init>(Bo tonesJuego.java:9)
he leido por ahi que el problema este es "a bad recursive call." algo asi como una llamada "recursiva" y dice que cuando no las defino con la terminacion correcta se llaman una y otra vez por siempre.
les dejo el codigo a ver si me dan una idea por donde va el problema, a mi me parece que es algo conceptual el error. le di mil vueltas y nada.
clase "ejecutable"
Código java:
Ver originalpublic class Ejecutable {
public static void main
(String [] args
){ MainVentana a=new MainVentana();
a.setDefaultCloseOperation(a.EXIT_ON_CLOSE);
a.setVisible(true);
a.setBounds(400, 300, 350, 290);
}
}
clase "MainVentana"
Código java:
Ver originalpublic class MainVentana
extends JFrame{
BotonesJuego boton=new BotonesJuego();
MainVentana(){
//definir atributo del frame--------
setTitle("TATETI - Tres En Raya");
setLayout(null);
setResizable(false);
setBackground
(Color.
black);
//Estado del juego ---jugador1----jugador2----
Estado.setEditable(false);
Estado.setBounds(10, 190, 170, 20);
Estado.setVisible(true);
add(Estado);
//juego seleccionado---3x3----4x4-----
Estado2.setEditable(false);
Estado2.setBounds(10, 220, 170, 20);
Estado2.setVisible(true);
add(Estado2);
//llamando a los metodos de botones
BJuego3x3();
BJuego4x4();
menupantalla();
}
//agrega los botnes y les da su posicion inicial-------------------------------
public void BJuego3x3(){
boton.BJuego3x3();
for (int i=0;i<boton.tateti3.length;i++){
for (int j=0;j<boton.tateti3[i].length;j++){
add(boton.tateti3[i][j]);
}
}
boton.tateti3[0][0].setBounds(10, 10, 50, 50);
boton.tateti3[0][1].setBounds(70, 10, 50, 50);
boton.tateti3[0][2].setBounds(130, 10, 50, 50);
boton.tateti3[1][0].setBounds(10, 70, 50, 50);
boton.tateti3[1][1].setBounds(70, 70, 50, 50);
boton.tateti3[1][2].setBounds(130, 70, 50, 50);
boton.tateti3[2][0].setBounds(10, 130, 50, 50);
boton.tateti3[2][1].setBounds(70, 130, 50, 50);
boton.tateti3[2][2].setBounds(130, 130, 50, 50);
}//fin de metodo BJuego3x3
public void BJuego4x4(){
boton.BJuego4x4();
boton.tateti4[0][0].setBounds(10, 10, 30, 30);
boton.tateti4[0][1].setBounds(60, 10, 30, 30);
boton.tateti4[0][2].setBounds(110, 10, 30, 30);
boton.tateti4[0][3].setBounds(160, 10, 30, 30);
boton.tateti4[1][0].setBounds(10, 60, 30, 30);
boton.tateti4[1][1].setBounds(60, 60, 30, 30);
boton.tateti4[1][2].setBounds(110, 60, 30, 30);
boton.tateti4[1][3].setBounds(160, 60, 30, 30);
boton.tateti4[2][0].setBounds(10, 110, 30, 30);
boton.tateti4[2][1].setBounds(60, 110, 30, 30);
boton.tateti4[2][2].setBounds(110, 110, 30, 30);
boton.tateti4[2][3].setBounds(160, 110, 30, 30);
boton.tateti4[3][0].setBounds(10, 160, 30, 30);
boton.tateti4[3][1].setBounds(60, 160, 30, 30);
boton.tateti4[3][2].setBounds(110, 160, 30, 30);
boton.tateti4[3][3].setBounds(160, 160, 30, 30);
for (int i=0;i<boton.tateti4.length;i++){
for (int j=0;j<boton.tateti4[i].length;j++){
add(boton.tateti4[i][j]);
}
}//fin de for
}//fin de metodo
public void menupantalla(){
int y=10;
for (int i=0;i<boton.opciones.length;){
boton.opciones[i].setBounds(200, y, 120, 30);
y+=40;
add(boton.opciones[i]);
}
}
}//fin de metodo
clase "BotonesJuego"
Código java:
Ver originalpublic class BotonesJuego
extends JButton{
EventosMenu evt=new EventosMenu();
String opt
[]={"Un Jugador",
"Dos Jugadores",
"Tres X Tres",
"Cuatro X Cuatro",
"Nuevo Juego",
"Salir"}; //atributos de botones para "tres en raya" en matriz de 3x3
public void BJuego3x3(){
for (int i=0;i<tateti3.length;i++){
for (int j=0;j<tateti3[i].length;j++){
tateti3[i][j].setVisible(false);
tateti3[i][j].addActionListener(evt);
}
}
}
//atributos de botones para "tres en raya" en matriz de 4x4
public void BJuego4x4(){
for (int i=0;i<tateti4.length;i++){
for (int j=0;j<tateti4[i].length;j++){
tateti4[i][j].setVisible(false);
tateti4[i][j].addActionListener(evt);
}
}
}
//atributos de menu del programa
public void menu(){
for (int i=0;i<opciones.length;i++){
opciones[i].setVisible(true);
opciones[i].addActionListener(evt);
}
}
}
clase "eventos"
Código java:
Ver original
BotonesJuego boton=new BotonesJuego();
//Accion Boton juego 3x3------------------------------------------------------
if(boton.opciones[2]==e.getSource()){
//Borrar botones 4x4-------------------
for (int i=0;i<boton.tateti4.length;i++){
for (int j=0;j<boton.tateti4[i].length;j++){
boton.tateti4[i][j].setVisible(false);
}
}
//iniciar botones 3x3-------------------
for (int i=0;i<boton.tateti3.length;i++){
for (int j=0;j<boton.tateti3[i].length;j++){
boton.tateti3[i][j].setVisible(true);
}
}
}
//Accion Boton juego 4x4------------------------------------------------------
if (boton.opciones[3]==e.getSource()){
//Borrar botones juego 3x3------------------
for (int i=0;i<boton.tateti3.length;i++){
for (int j=0;j<boton.tateti3[i].length;j++){
boton.tateti3[i][j].setVisible(false);
}
}
//iniciar botones juego 4x4------------------
for (int i=0;i<boton.tateti4.length;i++){
for (int j=0;j<boton.tateti4[i].length;j++){
boton.tateti4[i][j].setVisible(true);
}
}
}
}//fin de Action Event
}//Fin de Clase Eventos Menu