0

これは一日中私を夢中にさせていたので、ここに投稿して、他の誰かがそれを解決できるかどうかを確認することにしました. まず、背景画像を追加しようとしましたが、デフォルトの ImageIcon が機能していなかったため、代わりにペイント メソッドをオーバーライドしました。#

public class ImageJPanel extends JPanel { 
private static final long serialVersionUID = -1846386687175836809L;
Image image = null; 

public ImageJPanel(){ 
    addComponentListener(new ComponentAdapter() { 
    public void componentResized(ComponentEvent e) { 
        ImageJPanel.this.repaint(); 
    } 
}); 
}
//Set the image.
public ImageJPanel(Image i) { 
  image=i; 
  setOpaque(false); 
} 
//Overide the paint component.
public void paint(Graphics g) { 
  if (image!=null) g.drawImage(image, 0, 0, null); 
  super.paint(g); 
} 

}

以前はうまく機能していましたが、今はボタンに画像を追加したいのですが、機能していません。これが私のボタンの仕組みです:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Images images = new Images();
JPanel j = new ImageJPanel(images.menuBackground); 
j.setLayout(null);
JButton Button_1= new JButton("Button_1",new ImageIcon("images/gui/Button.png"));

Insets insets = j.getInsets();
Dimension size = Button_1.getPreferredSize();
Button_1.setBounds(300 + insets.left, 150+ insets.top, size.width, size.height);

Singleplayer.setSize(200, 50);

j.add(Button_1);

frame.add(j);
frame.setSize(800,600);
frame.setResizable(false);
Button_1.addMouseListener(singleplayerPressed);

frame.setVisible(true);

私の画像はすべて .png ですが、影響はありますか?

4

2 に答える 2

2

これから始めましょう:

public void paint(Graphics g) { 
    if (image!=null) g.drawImage(image, 0, 0, null); 
    super.paint(g); 
} 

これは間違ったアプローチです。まず、これが問題に対する正しいアプローチであることが絶対にわかっている場合を除き、ペイント メソッドをオーバーライドしたくはありません (詳細を知らなくても、そうではないことをお勧めします)。

次に、コンポーネントに画像をペイントし、すぐにその上にペイントします...(super.paint(g);作品の上にペイントすることができます。パネルが不透明であることはわかっていますが、これはまだ非常に悪いアプローチです)。

paintComponent代わりに使用

protected void paintComponent(Graphics g) { 
    super.paint(g); 
    if (image!=null) g.drawImage(image, 0, 0, null); 
} 

PNG 画像は問題なく、Swing ですぐにサポートされます。

プログラムが画像を認識できることを確認してください。ファイル ソースからロードされたものですか、それとも JAR 内のリソースですか?

これを試して:

System.out.println(new File("images/gui/Button.png").exits());

あなたのプログラムがファイルを見ることができる場合、そうでなければプログラムがファイルを見るtrueことができず、それがあなたの問題です。

于 2012-07-24T23:51:31.673 に答える
2

これを試して:

ImageIcon image = new ImageIcon(this.getClass()
                .getResource("images/gui/Button.png"));

補足として、paintComponent()notをオーバーライドする必要がありますpaint()また、すべての描画を行う前に必ずsuper実装を呼び出してください。詳細については、レッスン: カスタム ペインティングチュートリアルの実行を参照してください。

于 2012-07-24T23:53:04.243 に答える