Domanda

Ho un array di oggetti disposti attraverso un GridLayout in un JPanel. Ho bisogno di essere in grado di ricreare l'oggetto in un indice nella matrice ed avere l'aggiornamento GridLayout di conseguenza. Come ancora, non riesco a trovare comunque per "rinfrescare" o ridisegnare la GridLayout. E 'possibile aggiornare una GridLayout senza creare l'intero GridLayout o JPanel? Assumere Non ho accesso a JFrame.

import javax.swing.*;
import java.awt.*;

public class Test
{
    public static void main(String args[])
    {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        panel.setLayout(new GridLayout(5,5));

        JLabel[][] labels = new JLabel[5][5];
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                labels[j][i] = new JLabel("("+j+", "+i+")");
                panel.add(labels[j][i]);
            }
        }

        labels[0][0] = new JLabel("Hello World");

        //Without doing it this way (cause my objects can't do this)
        //labels[0][0].setText("Hello World!");

        frame.add(panel);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
    }
}
È stato utile?

Soluzione

Non capisco il motivo per cui non si può semplicemente aggiornare il testo sull'etichetta.

Perché avete bisogno a "ricreare l'oggetto"? Non ha senso. Ma se si ha realmente bisogno di fare questo allora il codice sarebbe qualcosa di simile:

panel.remove(0);
panel.add(theNewLabel, 0);
panel.revalidate();
panel.repaint();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top