2016-04-29 1 views
0

Ci-dessous le code est mon point de vue où je reçois un appareil photo en streaming. Les poignées du contrôleur définissent l'image et repeignent JInternalFrame. J'ai un problème avec cela parce que l'image de la caméra couvre l'ensemble JInternalFrame même la barre de titre. J'ai essayé d'utiliser JPanel mais j'ai eu des problèmes pour obtenir l'image sur le JPanel parce que j'étends JInternalFrame.JInternalFrame repeindre problème

public class CameraView extends JInternalFrame{ 

    private BufferedImage image; 

    public CameraView(){ 
     super("Camera", false,false,false, false); 

     setSize(500,500); 
     setLocation(200,200); 

    } 

    @Override 
    public void paint(Graphics g){ 
     g.drawImage(image, 0, 0, null); 
    } 


    public void setImage(BufferedImage image){ 
     this.image = image; 
    } 
} 

Voici à quoi cela ressemble. Pas de barre de titre. enter image description here

+0

Vous avez remplacé 'paint' sans appeler' super.paint', empêchant ainsi 'JInternalFrame' d'avoir l'opportunité de peindre ses propres décorations ou d'autres contenus. D'une manière générale, évitez de surcharger 'paint' et préférez' paintComponent', mais dans ce cas, vous pouvez juste ajouter un 'JLabel' au' JInternalFrame' et résoudre votre problème de façon complète – MadProgrammer

Répondre

0

Vous remplacez la méthode paint de la trame. Cette méthode paint est ce qui dessine la barre de titre.

Vous devez créer une seconde classe qui s'étend JComponent, remplacer la méthode paint sur cette classe, puis ajoutez une instance à votre image.

Quelque chose comme:

public class CameraView extends JInternalFrame{ 

    private BufferedImage image; 

    public CameraView(){ 
     super("Camera", false,false,false, false); 

     setLocation(200,200); 

     add(new JComponent() { 

      { 
       setSize(500, 500); // size of the image 
      } 

      @Override 
      public void paint(Graphics g){ 
       g.drawImage(image, 0, 0, null); 
      } 

     }); 

     pack(); 
    } 

    public void setImage(BufferedImage image){ 
     this.image = image; 
    } 
} 

Vous pouvez également avoir l'appel de méthode paintsuper.paint(g); mais la façon dont vous avez mis en place maintenant, l'image se superpose la barre de titre.


En outre, appeler super("Camera", false,false,false, false); est la même chose que d'appeler super("Camera"). Les valeurs par défaut sont false.

+0

merci qui fonctionne très bien. – PRCube

+0

Vous venez d'utiliser un 'JLabel': P – MadProgrammer