2017-05-04 14 views
1

私はこのような単純な機能にコードを縮小しました。ウィンドウに画像を表示することです。しかし、なぜ私は試しても画像が表示されませんか?私はJFrameを作成し、その画像を表示すると予想されるJPanelを作成しました。次に、パネルをフレームに追加します。ちなみに、私は画像をインポートし、それをダブルクリックしてURLを取得しました。画像がウィンドウに表示されない

import java.awt.*; 

import javax.swing.*; 

import com.sun.prism.Graphics; 

public class GUI { 
    JFrame frame=new JFrame("My game"); 
    JPanel gamePanel=new JPanel(); 

    public static void main(String[] args){ 
     GUI gui=new GUI(); 
     gui.go(); 
    } 

    public void go(){ 

     frame.setSize(300, 400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Background backPic=new Background(); 
     backPic.setVisible(true); 
     frame.getContentPane().add(backPic);   

     JPanel contentPane=(JPanel) frame.getContentPane(); 
     contentPane.setOpaque(false); 

     frame.setVisible(true); 
     } 

    class Background extends JPanel{ 
      public void paintComponent(Graphics g){ 
       ImageIcon backgroundIcon=new   ImageIcon("file:///E:/eclipse/EL/backgroundPicture.jpg"); 
       Image backgroundPic=backgroundIcon.getImage(); 

       Graphics2D g2D=(Graphics2D) g; 
       g2D.drawImage(backgroundPic,0,0,this); 
      } 
     } 
} 

答えて

2

com.sun.prism.Graphicsをインポートしたからです。それはjava.awt.Graphicsでなければなりません。

あなたのパスから「file:///」ビットも削除されます。また、それぞれのペイントイベントでイメージをロードしたくない場合もあります。ここでは背景クラスの改良版だ; -

class Background extends JPanel { 

    Image backgroundPic; 

    public Background() { 
     ImageIcon backgroundIcon=new ImageIcon("E:/eclipse/EL/backgroundPicture.jpg"); 
     backgroundPic=backgroundIcon.getImage(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2D=(Graphics2D) g; 
     g2D.drawImage(backgroundPic,10,10,this); 
    } 
} 
+2

新しい方法'paintComponent(com.sun.prism.Graphics) 'を提供し、paintComponent(java.awt.Graphics)をオーバーライドされませんを意味します。 –

+3

@DavidGilbert *「新しいメソッドを提供していることを意味します」*オーバーライドされたメソッドには必ず「@ Override」を指定する必要があります。貨物列車が到着する前に私たちが間違った道を歩いているというコンパイラの警告を得るのは便利です。 –

+0

これは、私も画像をインポートする必要があることを意味していますか?インポートした画像を削除すると、再び表示されません。 "super.paintComponent(g)"の機能は何ですか? – EstellaGu

関連する問題