0

イメージをパネルに設定しているときに、NetBeans リソースの管理で問題が発生しました。

これは私の動作しないコードです:

try {
    BufferedImage myPicture = ImageIO.read(new File("images/3D.jpg"));
    JLabel picLabel = new JLabel(new ImageIcon(myPicture));
    pnlMain.add(picLabel); //the main and only pannel made by matisse is called pnlMain
} catch (IOException e) {
    JOptionPane.showMessageDialog(this, "Cannot set image");
}

「images」という名前のフォルダーは、MAIN プロジェクト フォルダーにあります。いくつかのフォルダーがあります: build、nbproject、src、および "images"。
私が抱えている問題は、プログラムは実行されますが、画像が設定されないことです...

誰かが、このコードを使用して別のパッケージに別のクラスを作成することを提案しました:

public class PanelImage extends JPanel{
private Image imag;

public PanelImage(Image img){
    if(imagen != null){
        this.imagen = img;
    }
}

@Override
public void paint(Graphics g){
    g.drawImage(img, 0,0, getWidth(), getHeight(), this);
    setOpaque(false);
    super.paint(g);
}
}

しかし、私はそれを実装する適切な方法を見つけることができません...

4

1 に答える 1

2

あなたのImagePanelクラスのために

  1. super.paint[Component] 他のすべてのものの前に。
  2. 上書きしないpaintで代わりにpaintComponent
  3. paintComponentメソッドでプロパティを設定しないでくださいsetOpaque()。また、デフォルトでJPanelは不透明です
  4. getPreferredSize()パネルにペイントするためのオーバーライド

画像の読み込み用

アプリケーションが自分のマシンだけに固有のものでない限り、ファイル システムからイメージを読み込まない習慣をつけてください。

代わりに、クラスパスから読み取り、クラスパスにパッケージ化して画像をリソースにします

  1. ファイル構造を変更する

    ProjectRoot
             src
                images
                     3D.jpg
    
  2. クラスパスから読み取ります。ImageIOパスが正しいことを確認するために使用します。無効な場合、例外がスローされます

    URL url = getClass().getResource("/images/3D.jpg"); 
    Image image = ImageIO.read(url);
    

Netbeans GUI ビルダーの場合

デザインツールを使用してラベルアイコンを設定できます

  1. ナビゲーターまたはデザイン ビューからラベルを選択します。
  2. 右側のプロパティ ウィンドウに移動し、プロパティを見つけます。icon
  3. プロパティの右側にある省略記号ボタンをクリックすると、ダイアログが表示されます。
  4. 画像を見つけて [OK] を選択します (画像が src のパッケージに含まれていることを確認してください)。

関連するものとおそらく関連するものを参照してください

于 2014-05-01T14:51:09.577 に答える