1

がありJPanel、その背景として画像を追加したいと考えています。どうやってやるの ?

frame = new JFrame("Some frame");
panel1 = new JPanel();
panel1.setBorder(new EmptyBorder(5, 5, 5, 5));
// NEED TO ADD AN IMAGE TO THIS PANEL

panel1.setLayout(cardlayout);
frame.getContentPane().add(panel1);

frame.setLocationByPlatform(true);
frame.setVisible(true);

に画像を追加する必要がありpanelます。どうすればよいですか?

更新 1

    panel1 = new JPanel()
    {
    private static final long serialVersionUID = 1L;

    @Override
    public void paintComponent(Graphics g)
    {

        g.drawImage(Toolkit.getDefaultToolkit().createImage("1.jpg"), 0, 0, null);
    }
};
4

2 に答える 2

4

JPanelpaintComponent(Graphics g)のメソッドをオーバーライドし、この例のようにGraphicsオブジェクトで使用する必要があります。drawImage()g


また、@trashgodによる次の 2 つの例を確認してください。

于 2012-12-09T21:25:42.820 に答える
3

リソースの場所に問題があります。

Toolkit#createImageリソースが見つからない場合、空の画像を返すことがあります。

代わりに APIを使用することをお勧めしますImageIO。API は幅広い画像形式をサポートしていますが、画像が見つからない場合や読み込めない場合にも例外がスローされます。

画像の読み込み方法は、画像の場所によっても異なります。

画像がファイル システムに存在する場合は、単にFileオブジェクト参照を使用できます。画像が (アプリケーション内の) 埋め込みリソースである場合は、 を使用Class#getResourceして取得する必要がありますURL

ここに画像の説明を入力

public class TestGraphics {

    public static void main(String[] args) {
        new TestGraphics();
    }

    public TestGraphics() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setContentPane(new PaintTest());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class PaintTest extends JPanel {

        private BufferedImage image;

        public PaintTest() {

            setLayout(new BorderLayout());
            try {
                // Use this if the image exists within the file system
                image = ImageIO.read(new File("/path/to/image/imageName.png"));
                // Use this if the image is an embedded resource
//                image = ImageIO.read(getClass().getResource("/path/to/resource/imageName.png"));
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

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

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (image != null) {
                int x = (getWidth() - image.getWidth()) / 2;
                int y = (getHeight()- image.getHeight()) / 2;
                g.drawImage(image, x, y, this);
            }
        }

    }

}
于 2012-12-09T22:25:33.463 に答える