Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Eskizoide en 16 Abril 2018, 13:09 pm



Título: Actualizar JFrame
Publicado por: Eskizoide en 16 Abril 2018, 13:09 pm
Buenas, estoy haciendo un programilla del random walk, es decir una linea que se va moviendo por una cuadrícula de manera aleatoria. Bien, estoy haciendo todo el tema de la GUI y tengo un problema. Yo tengo varios botones: Empezar, finalizar, cambiar color y un jtextfield con un botón de convertir al lado.

Empezar comienza la simulación, finalizar la termina, cambia de color cambia la linea de color y lo de convertir cambia la cuadrícula por el número de cuadrados especificados en el text field.

Mi problema es que puedo iniciar el programa con el botón Empezar, pero si después intento cambiar el número de cuadrados que hay no se porque el programa no se actualiza. Se que el problema esta en que estoy haciendo lo mismo cuando le doy al boton empezar y cuando le doy al boton convertir pero no se como hacerlo, empecé hace bien poquito y aún sigo pescando con algunas cosas. Aquí os dejo el código:

Código:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


public class FPrincipal extends javax.swing.JFrame {
 private JPanel PContenedorDibujo;


 public static void main(String[] args) {
  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    FPrincipal inst = new FPrincipal();
    inst.setLocationRelativeTo(null);
    inst.setVisible(true);
   }
  });
 }
 
 public FPrincipal() {
  super();
  initGUI();
 }
 
 private void initGUI() {
  try {
   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   BorderLayout thisLayout = new BorderLayout();
   getContentPane().setLayout(thisLayout);
   this.setTitle("Random Walk");
  
   JPanel btnPanel = new JPanel(new FlowLayout());
JButton btnEmpezar = new JButton("Empezar");
btnPanel.add(btnEmpezar);
btnEmpezar.addActionListener(new ActionListener() {
        private PDibujo pDibujo;

@Override
        public void actionPerformed(ActionEvent evt) {
            PContenedorDibujo = new JPanel();
            BorderLayout PContenedorDibujoLayout = new BorderLayout();
            PContenedorDibujo.setLayout(PContenedorDibujoLayout);
            getContentPane().add(PContenedorDibujo, BorderLayout.CENTER);
            this.pDibujo = new PDibujo(10);
            PContenedorDibujo.add(this.pDibujo);
            pack();
            setSize(600, 600);
        }
    });

JPanel btnPanel2 = new JPanel(new FlowLayout());
JButton btnFinalizar = new JButton("Finalizar");
btnPanel.add(btnFinalizar);
btnFinalizar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
         try {
System.out.println("Terminando el programa en 4 segundos...");
         Thread.sleep(4000);
System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
        }
    });

JPanel btnPanel3 = new JPanel(new FlowLayout());
JButton btnLeft3 = new JButton("Cambiar Color");
btnPanel.add(btnLeft3);

JPanel btnPanel4 = new JPanel(new FlowLayout());
JTextField btnText = new JTextField(10);
JButton btnEnter = new JButton("Convertir");
btnPanel.add(btnText);
btnPanel.add(btnEnter);
btnEnter.addActionListener(new ActionListener() {
        private PDibujo pDibujo;

@Override
        public void actionPerformed(ActionEvent evt) {
dispose();
         String texto = btnText.getText();
         int num = Integer.parseInt(texto);
         PContenedorDibujo = new JPanel();
            BorderLayout PContenedorDibujoLayout = new BorderLayout();
            PContenedorDibujo.setLayout(PContenedorDibujoLayout);
            getContentPane().add(PContenedorDibujo, BorderLayout.CENTER);
            this.pDibujo = new PDibujo(num);
            PContenedorDibujo.add(this.pDibujo);
            repaint();
            pack();
            setSize(600, 600);
            setVisible(true);
            
        }
    });

Container cp = getContentPane();
    cp.setLayout(new BorderLayout());
    cp.add(btnPanel, BorderLayout.SOUTH);
    setSize(600, 600);
    
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

La clase de Pdibujo creo que no me hace falta ponerla para que se vea el problema, pero si no la pongo si veo que tal, muchísimas gracias a quien pueda ayudarme! Y no os echéis a llorar si veis fallos muy básicos en el programa.

PD: queda bastante mal todo el código ahi pegado de una pero es bastante sencillo,  lo importante esta en los actionEvent de los botones Empezar y Convertir, en los que basicamente tengo el mismo código para inicializar la GUI (cosa que estoy seguro que no debería hacer)