2017-08-22 3 views
-1

J'ai un problème avec l'affichage des composants sur mon JFrame. Je ferme ma fenêtre actuelle et en ouvre une nouvelle et je veux afficher jLabel dessus, mais rien ne se passe. Le code est ci-dessous:JFrame n'affiche pas les composants

   Frame[] nF = DBChooser.getFrames(); 

       nF[0].setVisible(false); 
       JFrame windoow = new JFrame("Processing");      
       JPanel pan = new JPanel(); 
       windoow.setPreferredSize(new Dimension(400, 150)); 
       pan.setPreferredSize(new Dimension(400, 150));     

       JLabel textLabel = new JLabel ("Processing..."); 
       textLabel.setLayout(null); 
       pan.setLayout(null); 
       windoow.setLayout(null);     
       pan.add(textLabel); 
       pan.revalidate(); 
       pan.repaint();     
       windoow.getContentPane().add(pan); 
       windoow.setLocationRelativeTo(null);      
       windoow.pack();     
       windoow.setVisible(true); 

Je vous remercie de toute aide

+0

1) Les interfaces graphiques Java doivent fonctionner avec différents systèmes d'exploitation, taille d'écran, résolution d'écran, etc., en utilisant différents PLAF dans différents environnements locaux. En tant que tels, ils ne sont pas propices à la mise en page pixel parfait. Utilisez plutôt des gestionnaires de disposition, ou [des combinaisons de ceux-ci] (http://stackoverflow.com/a/5630271/418556) avec un remplissage de mise en page et des bordures pour [espace blanc] (http://stackoverflow.com/a/17874718/ 418556). 2) Pour une meilleure assistance plus tôt, postez un [MCVE] ou [Short, Self Contained, Example correct] (http://www.sscce.org/). 3) Fournir un dessin ASCII ou un dessin simple de la disposition * prévue * de l'interface graphique à la taille minimale, et .. –

+0

.. si redimensionnable, avec plus de largeur et de hauteur. –

Répondre

1

Il est parce que vous définissez une disposition nulle à la fenêtre et le panneau sans spécifier de largeur, longueur ou la position, utilisez une LayoutManager ou de définir ces propriétés (par exemple limites). Un LayoutManager nul signifie que vous devez tout définir vous-même, car il n'y a rien (pas LayoutManager) qui placerait vos éléments automatiquement. Cet exemple utilise un BorderLayout, ce qui crée un bel effet:

enter image description here

le code:

import java.awt.BorderLayout; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Test { 
    public static void main(String[] args) { 
     JFrame windoow = new JFrame("Processing"); 
     JPanel pan = new JPanel(); 
     windoow.setPreferredSize(new Dimension(400, 150)); 
     pan.setPreferredSize(new Dimension(400, 150)); 

     JLabel textLabel = new JLabel("Processing..."); 
     textLabel.setLayout(null); 
     pan.setLayout(new BorderLayout()); 
     windoow.setLayout(new BorderLayout()); 
     pan.add(textLabel); 
     pan.revalidate(); 
     pan.repaint(); 
     windoow.getContentPane().add(pan); 
     windoow.setLocationRelativeTo(null); 
     windoow.pack(); 
     windoow.setVisible(true); 
    } 
} 
+0

toujours le même, l'étiquette n'affiche pas – johansonik

+0

@johansonik Comment peut-il ne pas être affiché lorsque j'ai exécuté le même code, et je vous ai posté l'image de la fenêtre avec le message? –

+0

Je ne sais pas pourquoi mais je peux voir une fenêtre vide sans aucun texte ... – johansonik

1

Pourquoi vous avez besoin tant de setLayout(null);? Je les enlève et ça marche

public class DBChooser extends Frame { 

    public static void main(String args[]) { 
     Frame[] nF = DBChooser.getFrames(); 
//  nF[0].setVisible(false); 
     JFrame windoow = new JFrame("Processing"); 
     JPanel pan = new JPanel(); 
     windoow.setPreferredSize(new Dimension(400, 150)); 
     pan.setPreferredSize(new Dimension(400, 150)); 
     JLabel textLabel = new JLabel("Processing..."); 
//  textLabel.setLayout(null); 
//  pan.setLayout(null); 
//  windoow.setLayout(null);     
     pan.add(textLabel); 
     pan.revalidate(); 
     pan.repaint(); 
     windoow.getContentPane().add(pan); 
     windoow.setLocationRelativeTo(null); 
     windoow.pack(); 
     windoow.setVisible(true); 
    } 
} 
+0

cela n'a pas aidé, l'étiquette n'affiche pas – johansonik

+0

Cela fonctionne très bien dans mon PC. Peut-être que vous devez poster plus de code ici –

+0

Qu'est-ce que 'nF [0] .setVisible (false);'? Êtes-vous sûr que votre code peut compiler sans commenter cela? –