2012-05-04 3 views
3

J'utilise JTabbedPane avec JPanel pour afficher JTable sur un onglet et un texte, une liste déroulante et un bouton jB sur un autre onglet.Après avoir perdu le focus sur l'écran JPanel en balançant, l'écran n'affiche pas le contenu

Pour la première fois, cela fonctionne correctement, mais si je réduis l'affichage de l'application et que je passe à l'application, les données sont correctes, mais avec un grave problème de changement d'onglet dans JTabbedPane. Maintenant, l'écran de l'onglet passe au bleu et n'affiche pas les données (j'espère que les données sont là mais il ne s'agit pas de repeindre ou de rafraîchir la fenêtre complète).

Maintenant avec l'écran bleu je fais la même procédure et change l'onglet dans JTabbedPane il montre les données correctes.

J'ai utilisé de la peinture mais cela ne fonctionne pas.

Aide nécessaire pour actualiser correctement la fenêtre ou la tabulation.

+6

Veuillez partager [SSCCE] (http://sscce.org/) qui illustre le problème. – tenorsax

+0

Comme Max l'a dit, le SSCCE est requis. Cela dit, peut-être essayer revalidate()? – yoonsi

Répondre

3

Assurez-vous que vous effectuez toutes les modifications des composants Swing (y compris la modification manuelle des données dans les modèles ou la commutation des onglets) via le fil de distribution d'événement. Swing permet au développeur d'ignorer la sécurité des threads, mais cela crée un comportement indéfini.

Voici un exemple de modification du contenu d'un modèle JComboBox.

final DefaultComboBoxModel model = (DefaultComboBoxModel) comboBox.getModel(); 
EventQueue.invokeLater(new Runnable(){ 
    public void run(){ 
     // Add all Swing component modification code here.. 
     // The line of code below is but an example of what you could do 
     model.addElement("String element"); 
    } 
}); 
Questions connexes