2016-09-27 2 views
2

Je fais un écran de connexion simple. J'ai ajouté deux JLabel dans JFrame dans mon programme et il fonctionne avec succès mais le problème est que quand j'ai lancé le programme, j'ai un écran vide et une jframe vide, mais j'ai ajouté deux jlabel dans ce cadre mais ça ne me montre rien. Je minimise la fenêtre et après un certain temps si j'ouvre à nouveau cette fenêtre, je peux voir ces composants.J'ai quelques problèmes concernant jframe et jlabel?

Voici mon code:

package javaapplication41; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.*; 

public class JavaApplication41 { 


    JavaApplication41() 
    { 
     JFrame cpec=new JFrame(); 
     cpec.setBounds(300,200,600,350); 
     cpec.setUndecorated(false); 
     cpec.setVisible(true); 
     cpec.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      JLabel l = new JLabel(new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\file (2).jpg")); 
      l.setBounds(100,100,200,125); 
      //l.setLayout(null); 
      cpec.add(l);    
      JLabel kiq=new JLabel(new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\bla.jpg")); 
       kiq.setBounds(100,100,100,100); 
       //kiq.setLayout(null); 
     l.add(kiq); 
    } 
    public static void main(String[] args) { 
     JavaApplication41 ne=new JavaApplication41(); 
    } 

} 

Je reçois cette sortie quand je lance le programme:

blank window

et quand je réduis cette fenêtre et ouvrir à nouveau ce, je reçois la sortie désirée ici est:

enter image description here

qu'est-ce que je fais mal?

Répondre

2

Vous devez mettre cpec.setVisible(true); après avoir ajouté tous les éléments de votre jframe.I espère que cela va sûrement résoudre votre problème

1

Vous avez défini la visibilité de JFrame à un stade très précoce. À ce moment, le JLabel n'a pas été ajouté. Lorsque vous avez réduit et redimensionné votre cadre, il a été rendu à nouveau, ce qui a permis d'afficher les composants que vous avez ajoutés. N'oubliez pas d'ajouter des composants avant de définir la visibilité de l'image (définissez enfin la visibilité).

Aussi, je vous suggère d'utiliser des threads GUI lorsque vous travaillez sur des composants swing. Reportez-vous aux utilitaires swing ici: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

Enfin définissez la disposition de JFrame sur null lorsque vous essayez d'ajouter des étiquettes à des coordonnées spécifiques avec la méthode setBounds().

1

La mise en page par défaut de jframe est BorderLayout, donc si vous voulez, vous pouvez changer la disposition par référence de java.awt.Container classe abstraite.

Il est initialisé par getContentPane() de javax.swing.JFrame classe. Les composants sont ajoutés uniquement par référence à la classe java.awt.Container.

java.awt.Container c=cpec.getContentPane(); 
c.setLayout(new FlowLayout(FlowLayout.LEFT)); 
c.add(l); //label will get added to JFrame instance that is referenced 
//then define size and at last define visibility 
cpec.setSize(500, 500); 
cpec.setVisible(true); 
0

Définir le gestionnaire de mise en page du conteneur comme nul. Par défaut, il utilise BorderLayout comme gestionnaire de mise en page. Vous devez simplement appeler la méthode getContentPane() en utilisant la référence du JFrame, qui renvoie une référence de conteneur. Exemple:

Container c = frame.getContentPane(); 
c.setLayout(null); 

Pour plus d'informations, vous pouvez passer par my Website.