2016-04-29 17 views
0

以下のコードは、私がストリーミングカメラを表示する私の見解です。コントローラーハンドルはイメージを設定し、JInternalFrameを再描画します。カメラの画像がタイトルバーのJInternalFrame全体をカバーするので、私はこれに問題があります。私はJPanelを使用しようとしましたが、JInternalFrameを拡張しているため、JPanelでイメージを取得する際に問題がありました。JInternalFrame再描画の問題

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

これは次のようなものです。タイトルバーはありません。 enter image description here

+0

あなたは 'super.paint'を呼び出さずに' paint'をオーバーライドしました。 'JInternalFrame'が自身の装飾や他のコンテンツをペイントする機会を持たないようにします。一般的に言えば、 'paint'をオーバーライドしないで' paintComponent'を好むべきですが、この場合は 'JInternalFrame'に' JLabel'を追加して問題を解決してください。 – MadProgrammer

答えて

0

フレームのpaintメソッドをオーバーライドしています。このpaintメソッドは、タイトルバーを描画します。

JComponentを拡張する2番目のクラスを作成し、そのクラスのpaintメソッドをオーバーライドして、そのインスタンスをフレームに追加する必要があります。

何かのように:あなたはまた、paintメソッド呼び出しsuper.paint(g);いますが、それは今設定した方法を持っている可能性が

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

、あなたのイメージは、タイトルバーをオーバーレイします。 super("Camera", false,false,false, false);を呼び出しても


は、 super("Camera")を呼び出すのと同じです。デフォルトは falseです。

+0

うまく動作してくれてありがとうございます。 – PRCube

+0

あなたは 'JLabel'を使いました:P – MadProgrammer