Hola
mi problema es el siguiente, estoy programando el Juego de la vida, el juego parte con una matriz de 12 x 12, pero quiero dar la opcion al usuario de poder cambiar el tamaño de la matriz, por ejemplo que quede de 20 x 10, y quiero que la matriz con las nuevas dimensiones este en el mismo Frame... por lo que entiedo esto debo realizarlo con el metodo repaint() o update(), pero no se bien como ocuparlos o si debo redifinirlos, de ante mano muchas gracias.... :)
este es el codigo del Frame:
Código PHP:
package principal;
import java.awt.event.ActionEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.event.ChangeListener;
import objetos.*;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.*;
/**
*
* @author sahch
*/
public class principalVista2 extends JFrame {
private JuegoDeLaVida juego;
private Canvas canvas[][];
private JButton jbtn_siguiente;
private JButton jbtn_limpiar;
private JButton jbyn_random;
private JButton jbtn_okTamaño;
private JPanel jpnl_panelBotones;
private JPanel jpnl_panelCanvas;
private JSpinner jspn_numfilas;
private JSpinner jspn_numcolumnas;
private JLabel jlbl_fila;
private JLabel jlbl_comluman;
private int filas;
private int columnas;
public principalVista2() {
super("El Juego de la Vida");
this.filas = 12;
this.columnas = 12;
initComponets();
}
private void initComponets() {
this.jspn_numfilas = new JSpinner(new SpinnerNumberModel(this.filas, 1, 100, 1));
this.jspn_numfilas.setSize(50, 20);
this.jlbl_fila = new JLabel("Filas");
this.jlbl_fila.setSize(70, 20);
this.jspn_numcolumnas = new JSpinner(new SpinnerNumberModel(this.columnas, 1, 100, 1));
this.jspn_numcolumnas.setSize(50, 20);
this.jlbl_comluman = new JLabel("Columnas");
this.jlbl_comluman.setSize(70, 20);
this.jpnl_panelBotones = new JPanel();
this.jpnl_panelCanvas = new JPanel();
this.juego = new JuegoDeLaVida(this.filas, this.columnas);
this.canvas = new Canvas[this.juego.getMallaDeJuego().getMallaCelulas().length][this.juego.getMallaDeJuego().getMallaCelulas()[0].length];
this.setLayout(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(true);
jbtn_okTamaño = new JButton(new ImageIcon(getClass().getResource("/principal/icono_ok.png")));
jbtn_okTamaño.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
jbtn_okTamañoActionPerformed(ae);
}
});
jbyn_random = new JButton(new ImageIcon(getClass().getResource("/principal/icono_random.jpeg")));
jbyn_random.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
jbtn_randomActionPerformed(ae);
}
});
this.jbtn_siguiente = new JButton();
this.jbtn_siguiente.setIcon(new ImageIcon(getClass().getResource("/principal/icono_siguiente.png")));
jbtn_siguiente.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jbtn_siguienteActionPerformed(evt);
}
});
this.jbtn_limpiar = new JButton();
this.jbtn_limpiar.setIcon(new ImageIcon(getClass().getResource("/principal/icono_escoba.png")));
jbtn_limpiar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jbtn_limpiarActionPerformed(evt);
}
});
this.jpnl_panelCanvas.setLayout(null);
int aux1 = 20, aux2 = 20, aux3 = 0;
for (int x = 0; x < this.canvas.length; x++) {
for (int y = 0; y < this.canvas[0].length; y++) {
this.canvas[x][y] = new Canvas();
this.canvas[x][y].setSize(20, 20);
this.canvas[x][y].setLocation(aux1, aux2);
//celula viva, color azul, celula muerta color gris
this.canvas[x][y].setBackground(Color.gray);
canvas[x][y].addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
canvasMouseClicked(evt);
}
});
this.jpnl_panelCanvas.add(this.canvas[x][y]);
aux1 += 21;
}
aux3 = aux1;
aux1 = 20;
aux2 += 21;
}
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jpnl_panelBotones);
jpnl_panelBotones.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 100, Short.MAX_VALUE));
this.jpnl_panelBotones.add(this.jbtn_siguiente);
this.jpnl_panelBotones.add(this.jbtn_limpiar);
this.jpnl_panelBotones.add(this.jbyn_random);
this.jpnl_panelBotones.add(this.jlbl_fila);
this.jpnl_panelBotones.add(this.jlbl_comluman);
this.jpnl_panelBotones.add(this.jspn_numfilas);
this.jpnl_panelBotones.add(this.jspn_numcolumnas);
this.jpnl_panelBotones.add(this.jbtn_okTamaño);
this.jbtn_okTamaño.setLocation(330, 10);
this.jbtn_okTamaño.setSize(50, 50);
this.jbtn_siguiente.setLocation(10, 10);
this.jbtn_siguiente.setSize(50, 50);
this.jbtn_limpiar.setLocation(70, 10);
this.jbtn_limpiar.setSize(50, 50);
this.jbyn_random.setLocation(130, 10);
this.jbyn_random.setSize(50, 50);
this.jlbl_fila.setLocation(190, 10);
this.jlbl_comluman.setLocation(190, 40);
this.jspn_numfilas.setLocation(270, 10);
this.jspn_numcolumnas.setLocation(270, 40);
this.jpnl_panelBotones.setSize(390, 70);
this.jpnl_panelBotones.setBorder(BorderFactory.createEtchedBorder());
//this.jpnl_panelCanvas.setBorder(BorderFactory.createEtchedBorder());
this.jpnl_panelCanvas.setSize(aux3 + 20, aux2 + 19);
if (this.jpnl_panelCanvas.getWidth() < this.jpnl_panelBotones.getWidth()) {
this.setSize(430, aux2 + 125);
this.jpnl_panelCanvas.setLocation(this.getWidth() / 2 - this.jpnl_panelCanvas.getWidth() / 2 - 10, 0);
this.jpnl_panelBotones.setLocation((this.getWidth() / 2) - (this.jpnl_panelBotones.getWidth() / 2), aux2 + 20);
} else {
this.setSize(aux3 + 25, aux2 + 125);
this.jpnl_panelCanvas.setLocation(0, 0);
this.jpnl_panelBotones.setLocation((this.getWidth() / 2) - (this.jpnl_panelBotones.getWidth() / 2), aux2 + 20);
}
this.add(this.jpnl_panelCanvas);
this.add(this.jpnl_panelBotones);
}
private void jbtn_siguienteActionPerformed(java.awt.event.ActionEvent evt) {
this.juego.actualizar();
this.actualizarCanvas();
}
private void jbtn_limpiarActionPerformed(ActionEvent evt) {
this.juego.iniciar(false);
this.actualizarCanvas();
}
private void actualizarCanvas() {
for (int x = 0; x < this.canvas.length; x++) {
for (int y = 0; y < this.canvas[0].length; y++) {
if (this.juego.getMallaDeJuego().getMallaCelulas()[x][y].isEstado() == true) {
this.canvas[x][y].setBackground(Color.blue);
} else {
this.canvas[x][y].setBackground(Color.gray);
}
}
}
}
private void canvasMouseClicked(java.awt.event.MouseEvent evt) {
for (int x = 0; x < this.canvas.length; x++) {
for (int y = 0; y < this.canvas[0].length; y++) {
if (evt.getSource() == this.canvas[x][y]) {
if (this.juego.getMallaDeJuego().getMallaCelulas()[x][y].isEstado() == true) {
this.juego.getMallaDeJuego().getMallaCelulas()[x][y].setEstado(false);
this.canvas[x][y].setBackground(Color.gray);
} else {
this.juego.getMallaDeJuego().getMallaCelulas()[x][y].setEstado(true);
this.canvas[x][y].setBackground(Color.blue);
}
}
}
}
}
public void jbtn_randomActionPerformed(ActionEvent ae) {
this.juego.iniciarRandom();
this.actualizarCanvas();
}
private void jbtn_okTamañoActionPerformed(ActionEvent ae) {
this.filas = Integer.parseInt(this.jspn_numfilas.getValue().toString());
this.columnas = Integer.parseInt(this.jspn_numcolumnas.getValue().toString());
System.out.println("repaint");
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new principalVista2().setVisible(true);
}
});
}
}