2017-12-07 3 views
0

私はSwingを初めて使用し、JFrameに画像の背景を追加しようとしています。しかし私のpaintComponentメソッドは機能しません。私のコードを修正してイメージがバックグラウンドで描かれるようにするための提案をお願いしますか?paintComponentコードが動作しません

コードは以下の通りです:代わりに、そのコンテンツペインのpaintComponentを上書きJFramepaintComponentをオーバーライド

// all necessary imports have been added. 
public class Menu extends JFrame { 
private Image backgroundImage; 
private JFrame frame; 

public static void main(String[] args) throws IOException { 
    Menu window = new Menu(); 
    window.frame.setVisible(true); 
} 

public Menu() throws IOException { 
    initialize(); 
} 

public void initialize() throws IOException { 

    frame = new JFrame(); 
    frame.setBounds(100, 100, 312, 294); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

} 
public void paintComponent(Graphics g) throws IOException { 
    backgroundImage = ImageIO.read(new File("P:\\Profiles\\workspace\\Games\\Images\\matrix.jpg")); 
    g.drawImage(backgroundImage, 0, 0, null); 

} 
} 

答えて

3

は、有用ではありません。

通常は、JFrameの拡張も必要ありません。

最後に、画像を読み込み(各ペイントコール時にロードするのではなく)、画像をロードし、必要に応じてコンテンツパネルを操作することをお勧めします。一緒にすべてを置く

、この例を参照してください。

public class Menu extends JPanel { 

    private Image backgroundImage; 

    public static void main(final String[] args) throws IOException { 
     Menu menu = new Menu(); 
     JFrame frame = new JFrame(); 
     frame.setContentPane(menu); 
     frame.setBounds(100, 100, 312, 294); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public Menu() throws IOException { 
     initialize(); 
    } 

    public void initialize() throws IOException { 

     backgroundImage = ImageIO.read(new File("P:\\Profiles\\workspace\\Games\\Images\\matrix.jpg")); 

    } 

    @Override 
    public void paintComponent(final Graphics g){ 

     super.paintComponent(g); 
     g.drawImage(backgroundImage, 0, 0, this); 

    } 

} 
+0

こんにちはあなたが助けてくれてありがとう。それは今働いているようだ。将来的に私がまだ新しいので、なぜそれが動作していない前に、なぜこのミスを再びしたくないか説明することができます。 –

+0

'JFrame'は内容パネルとして' JPanel'を使います。 'JFrame'からペイントメソッドをオーバーライドする用途はありません。あなたが実際に見るのはフレームのコンテンツパネルです(前面にあり、このフレームに直接ペイントしようとするものはすべて隠されています)。絵をカスタマイズしたい – Berger

+0

* "JFrameのpaintComponentを無効にすることは役に立ちません" * - 実際は不可能です。 – MadProgrammer

関連する問題