Добавьте прозрачное изображение ".PNG" в JFrame. - PullRequest
0 голосов
/ 28 февраля 2019

Я делаю приложение, использующее JFrame, которое требует использования прозрачных изображений, таких как это:

1 Однако всякий раз, когда я пытаюсь добавить изображение в мой JFrame, я получаю это:

2

Может кто-нибудь помочь мне разобраться, как заставить это работать?Помощь будет принята с благодарностью!

Вот соответствующий код:

public class Canvas
{
private JFrame frame;
private CanvasPane canvas;
private Graphics2D graphic;
private Color backgroundColour;
private Image canvasImage;
public Canvas(String title, int width, int height, Color bgColour)
    {
        frame = new JFrame();
        canvas = new CanvasPane();
        frame.setContentPane(canvas);
        frame.setTitle(title);
        canvas.setPreferredSize(new Dimension(width, height));
        frame.setResizable(false);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        backgroundColour = bgColour;
        frame.pack();
        setVisible(true);
    }
public void setVisible(boolean visible)
    {
        if(graphic == null) {
            // first time: instantiate the offscreen image and fill it with
            // the background colour
            Dimension size = canvas.getSize();
            canvasImage = canvas.createImage(size.width, size.height);
            graphic = (Graphics2D)canvasImage.getGraphics();
            graphic.setColor(backgroundColour);
            graphic.fillRect(0, 0, size.width, size.height);
            graphic.setColor(Color.black);
        }
        frame.setVisible(true);
    }
    public boolean drawImage(Image image, int x, int y)
    {
        boolean result = graphic.drawImage(image, x, y, null);
        canvas.repaint();
        return result;
    }
private class CanvasPane extends JPanel
    {
        private CanvasPane(){
            setOpaque(false);
        }
        public void paint(Graphics g)
        {
            g.drawImage(canvasImage, 0, 0, null);
        }
    }
}

Пожалуйста, дайте мне знать, если вам нужен еще код!

...