Cómo "actualizar" un JFrame dentro de un método actionPerformed?

Alexey:

Trato de diseñar una interfaz gráfica de usuario para una red neuronal que hice recientemente. Estoy utilizando el MNIST-conjunto de datos y quiero mostrar el dígito escrito a mano usando JPanels con los valores de brillo escritas en el interior. Al pulsar el "tren" -botón la red se capacita y se muestra cada nuevo dígito. Sin embargo, esto ocurre en un bucle en el método actionPerformed del botón y parece que no puedo cambiar el fondo de las etiquetas o el texto (por lo menos Indiferente mostrar los cambios) hasta que el último. No sé si la derecha estoy, pero parece que sólo el último cambio se visualiza. Por eso mi pregunta es si es posible "refresco" JFrame dentro del método actionPerformed.

Me revalidate ya han intentado (), invalidate () y validar (), SwingUtilities.updateComponentTreeUI (marco), pero ninguno de ellos funcionó.

Aquí está la parte pertinente de mi código:

train.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < iMax; i++) {
                ...
                digitRefresh(reader.getInputs()[i], (int) reader.getInputs()[i][0], 0);

            }
        }
    });

.

public void digitRefresh(double[] pixelValue, int target, int result) {
    for (int i = 0; i < 784; i++) {
        double value = pixelValue[i + 1];
        int brightness = (int) (value * 255);
        l_digit[i].setText(String.valueOf(value));
        l_digit[i].setBackground(new Color(brightness, brightness, brightness));
    }
    l_target.setText(String.valueOf(target));
    l_result.setText(String.valueOf(result));
    this.revalidate();
}

gracias por todos los awnser y lo siento por mi mala Inglés.

Matt:

Lo más sencillo que hacer es empezar un nuevo hilo.

    @Override
    public void actionPerformed(ActionEvent e) {
        new Thread( ()->{
        for (int i = 0; i < iMax; i++) {
            ...
            final int fi = i;
            EventQueue.invokeLater( ()->{
                digitRefresh(reader.getInputs()[fi], (int) reader.getInputs()[fi][0], 0);
            });

        }).start();
    }

Ahora todo el trabajo se está haciendo en un hilo separado, entonces como el ...acabados de trabajo, método de actualización dígitos llamada desde la EDT. Observe la parte final int fi. Hay advertencias sobre yendo y viniendo en las roscas por lo que es bueno mirar hacia un mejor control que simplemente usar hilo.

El columpio del trabajador, por ejemplo:

¿Cómo uso SwingWorker en Java?

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=367390&siteId=1
Recomendado
Clasificación