1

私はJavaが初めてで、現在グラフィックを使用してゲームを作成しています。から拡張するこのクラスがありますJFrame。このクラスには、JPanel背景として画像が必要な がたくさんあります。私が知っているように、JPanel で画像を描画できるようにするには、JPanel から拡張された別のクラスが必要であり、そのクラスのpaintComponentメソッドが作業を行います。しかし、私はそれぞれのために別々のクラスを作りたくありませんJPanel.私はそれらの数が多すぎます; そして、私は背景だけに関心があるという事実。これどうやってするの?それは匿名の内部クラスですか?どのように?

理解を深めるために、いくつかのコードを提供しました。

public GUI extends JFrame {
  private JPanel x;
  ...  

  public GUI() {
   x = new JPanel();
   // put an image background to x
  }
4

3 に答える 3

3

Image??を取る単一のクラスを作成してみませんか?

public class ImagePane extends JPanel {

    private Image image;

    public ImagePane(Image image) {
        this.image = image;
    }

    @Override
    public Dimension getPreferredSize() {
        return image == null ? new Dimension(0, 0) : new Dimension(image.getWidth(this), image.getHeight(this));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.drawImage(image, 0, 0, this);
        g2d.dispose();
    }
}

ペイントする場所についてのヒントも提供します。

このようにして、必要なときにインスタンスを簡単に作成できます

更新しました

他の質問は、なぜですか?

JLabel追加の作業なしでアイコンを描画する a を使用できます...

詳細については、ラベルの使用方法を参照してください...

これは実際には悪い考えです。JLabel優先サイズを計算するときに子コンポーネントを使用せず、優先サイズを決定するときに画像のサイズとテキスト プロパティのみを使用するため、コンポーネントのサイズが正しくない可能性があります。

于 2013-08-23T03:08:01.813 に答える
3

そのために別のクラスを作成する必要はありませんか?あなたはただ行うことができます:

x = new JPanel(){
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        //draw background image
    }
};
于 2013-08-23T03:02:09.510 に答える
1

これを一行で行うことができます:

panelInstance.add(new JLabel(new ImageIcon(ImageIO.read(new File("Image URL")))));

うまくいくことを願っています。

于 2013-08-23T04:10:10.897 に答える