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:
y me marca como veinte o 30 veces estas misma linea:Exception in thread "main" java.lang.StackOverflowError;
Cita:
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.at com.wawanime.JFrame3.tateti.EventosMenu.<init>(Eve ntosMenu.java:10)
at com.wawanime.JFrame3.tateti.BotonesJuego.<init>(Bo tonesJuego.java:9)
at com.wawanime.JFrame3.tateti.BotonesJuego.<init>(Bo tonesJuego.java:9)
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 original
public class Ejecutable { 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 original
BotonesJuego boton=new BotonesJuego(); MainVentana(){ //definir atributo del frame-------- setTitle("TATETI - Tres En Raya"); setLayout(null); setResizable(false); //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 original
EventosMenu evt=new EventosMenu(); //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