1

私はそれをグーグルで検索し、コードを見つけました:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageTest {

  public static void main(String[] args) {
    ImagePanel panel = new ImagePanel(new ImageIcon("background.png").getImage());

    JFrame frame = new JFrame();
    frame.getContentPane().add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

class ImagePanel extends JPanel {

  private Image img;

  public ImagePanel(String img) {
    this(new ImageIcon(img).getImage());
  }

  public ImagePanel(Image img) {
    this.img = img;
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
  }

  public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
  }
}

ImageTest.java ファイルを作成し、background.png を同じフォルダーに配置すると、これでうまくいきました。

しかし、同じコードを Eclipse IDE (デフォルト パッケージ) に画像とともに貼り付けると、画像が背景として設定されません。実際には画像が見つかりません。これが理由です。

両方を同じにしてみましたが、package pack;それでも画像が見つからないため、出力はありません。

ワークスペース>プロジェクトフォルダー> war> WEB-INF>クラスを開こうとしました次に、cmdからプログラムをコンパイルしました。それでも映りません。

何が問題なのかわからない。解決策を知っている人なら誰でも大歓迎です。

前もって感謝します。

フレームに直接背景を設定することも歓迎されます...

私はコードを使用してこれらすべてを実行しましたが、これが機能するようになったら、GUI 用の Windows ビルダーに移行します。それで、あなたからの助けはウィンドウビルダーでも機能しますか?

4

2 に答える 2

2
..new ImageIcon("background.png")..  

これは、フィードバックを提供しない画像をロードするための愚かな(しかし一般的な)方法です1

background.pngほとんどの場合、はファイルではなく、Jarの一部であることがわかります。その場合、それにアクセスする方法は、から取得したものを使用するURLことClass.getResource()です。

  1. 画像をロードするスマートな方法はImageIO、を使用することです。これは、画像をロードできない場合に役立つ有益な例外をスローします。
于 2012-03-22T04:39:12.433 に答える
1

これはあなたの質問に実際に答えているわけではありませんが、答えが受け入れられたので、一体何なのか、覗いてみたいと思うかもしれません。

このクラスは、他の JPanel と同じように使用できます。パネルの背景に画像を平手打ちし、フレームのサイズが変更されると画像のサイズも変更されます。

public class JPanelWithBackground extends JPanel { 
Image imageOrg = null; 
Image image = null; 
{ 
addComponentListener(new ComponentAdapter() { 
    public void componentResized(ComponentEvent e) { 
        int w = JPanelWithBackground.this.getWidth(); 
        int h = JPanelWithBackground.this.getHeight(); 
        image = w>0&&h>0?imageOrg.getScaledInstance(w,h,  
                java.awt.Image.SCALE_SMOOTH):imageOrg; 
        JPanelWithBackground.this.repaint(); 
    } 
}); 
} 
public JPanelWithBackground(Image i) { 
  imageOrg=i; 
  image=i; 
  setOpaque(false); 
} 
public void paint(Graphics g) { 
  if (image!=null) g.drawImage(image, 0, 0, null); 
  super.paint(g); 
} 
} 

使用例:

Image image = your image 
JFrame f = new JFrame(""); 
JPanel j = new JPanelWithBackground(image); 
j.setLayout(new FlowLayout()); 
j.add(new JButton("YoYo")); 
j.add(new JButton("MaMa")); 
f.add(j); 
f.setVisible(true); 
于 2012-03-22T07:20:54.070 に答える