1

笑、私は少し前に完全に失敗しました。何かを削除した後にコードをアップロードしました。

とにかく、ImageIconsを使用して背景をロードしましたが、BufferedImageを使用しようとしています。そのため、その上にさらに画像を描画する必要があると言われました。

BufferedImageはエラーを返しませんが、何も描画しません。

コードは以下のとおりです。

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Client {
    static JFrame client = new JFrame();

    public static void drawBackground() throws IOException {
        BufferedImage background = ImageIO.read(new File("Resources/Images/Background.png"));
        client.setTitle("Keldagrim: The lost Empire");
        client.setSize(1280, 720);
        client.setDefaultCloseOperation(client.EXIT_ON_CLOSE);
        Container pane = client.getContentPane();
        BackgroundPanel backgroundPanel = new BackgroundPanel(background);
        pane.add(backgroundPanel);
        client.pack();
        client.setVisible(true);
    }

    public static void drawLogin() {
        ImagePanel loginBox = new ImagePanel(new ImageIcon("Resources/Images/LoginBox.png").getImage());
        client.add(loginBox);
        client.repaint();
        System.out.println("Painted");
    }

    public static void main(String[] args) {
        try {
            drawBackground();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        drawLogin();
    }

}

    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);
    }

}


class BackgroundPanel extends JPanel {
    BufferedImage backgroundImage;
    public BackgroundPanel(BufferedImage image){
        backgroundImage = image;
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(backgroundImage, null, 50,50);
    }
}
4

2 に答える 2

2

うまくいかないことがたくさんあります...

  1. どこにも実際に電話をかけているわけdrawClientではないので、フレームが作成されることはありません。このメソッドは値を追加せず、実際に問題を混乱させるため、実際にはこのメソッドを削除します。
  2. 背景画像への静的参照を使用しています。つまり、作成する「クライアント」パネルの数に関係なく、アプリケーション全体で使用できる画像は1つだけです。次に、その参照をとにかくパネルに渡しますが、これは無駄です。
  3. 実際にはエラーをログに記録する(そしてエラーメッセージを表示する)必要がありますが、少なくともスタックトレースをコンソールにダンプする必要がありますが、これにより作業がはるかに楽になります。
  4. setVisibleフレームの設定が完了したら電話してください。設定しないと面白いことが起こります

次のようなものを使用してみてください...

public class Client extends JPanel {

    private Image backgroundImage;

    public Client(Image backgroundImage) {
        this.backgroundImage = backgroundImage;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                }

                BufferedImage background = null;
                try {
                    background = ImageIO.read(new File("Resources/Images/Background.png"));
                    JFrame client = new JFrame();
                    client.setTitle("Keldagrim: The lost Empire");
                    client.setSize(1280, 720);
                    client.setDefaultCloseOperation(client.EXIT_ON_CLOSE);
                    client.setContentPane(new Client(background));
                    client.setVisible(true);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });
    }
}

また、補足として、あなたは実際に背景を描いているわけではありませんが、それは別の質問だと思います;)

見てみてください

于 2013-02-19T03:01:20.100 に答える
0

これを試して:

if (backgroundImage != null) {
         Client c =   new Client(backgroundImage);
         c.drawClient();
} else {
            System.out.println("Error: No background Image.");
}
于 2013-02-19T02:55:29.660 に答える