2010-12-03 6 views
2

J'ai un tableau d'objets disposés à travers un GridLayout dans un JPanel. Je dois être en mesure de recréer l'objet dans un index dans le tableau et avoir la mise à jour GridLayout pour refléter cela. Pour l'instant, je ne trouve pas de toute façon à "actualiser" ou redessiner le GridLayout. Est-il possible de rafraîchir un GridLayout sans créer l'ensemble GridLayout ou JPanel? Supposons que je n'ai pas accès à JFrame.Mettre à jour la grille dans GridLayout

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); 
    } 
} 

Répondre

6

Je ne comprends pas pourquoi vous ne pouvez pas mettre à jour le texte sur l'étiquette.

Pourquoi avez-vous besoin de "recréer l'objet"? Cela n'a aucun sens. Mais si vous avez vraiment besoin de faire cela, alors le code serait quelque chose comme:

panel.remove(0); 
panel.add(theNewLabel, 0); 
panel.revalidate(); 
panel.repaint(); 
Questions connexes