Java 如何使用JFileChooser将图片加载到现有白色背景

Java 如何使用JFileChooser将图片加载到现有白色背景,java,Java,我已经创建了一个类似绘画的小程序,我想知道是否可以将一张图片(.jpg.png)加载到我的“白色工作表”中并在上面画画。以下是我的源代码: public class rajzlap extends JPanel implements MouseMotionListener { private static final long serialVersionUID = 1L; private BufferedImage image; private Graphics2D g2; private

我已经创建了一个类似绘画的小程序,我想知道是否可以将一张图片(.jpg.png)加载到我的“白色工作表”中并在上面画画。以下是我的源代码:

public class rajzlap extends JPanel implements MouseMotionListener {

private static final long serialVersionUID = 1L;

private BufferedImage image;
private Graphics2D g2;
private int x = -1, y = -1;

private JFileChooser fileChooser;

private int toolbaritem = -5;
private int vastagsag = 1;


public rajzlap() {
    setBorder(BorderFactory.createLineBorder(Color.BLACK));
    addMouseMotionListener(this);
    image = new BufferedImage(3000, 2000, BufferedImage.TYPE_INT_RGB);
    g2 = (Graphics2D) image.getGraphics();
    g2.setColor(Color.WHITE);
    g2.fillRect(0, 0, 3000, 2000);

    fileChooser = new JFileChooser();
    fileChooser.setFileFilter(new FileNameExtensionFilter("kepek (*.jpg)", "jpg"));
    fileChooser.setAcceptAllFileFilterUsed(false);
}

@Override
protected void paintComponent(Graphics g) {
    g.drawImage(image, 0, 0, null);

}

// load from file
public void loadText() {
    if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        try (FileReader fr = new FileReader(fileChooser.getSelectedFile())) {

        } catch (IOException e1) {
            JOptionPane.showMessageDialog(this, "Nem sikerult beolvasni a szoveget!", "Hiba",
                    JOptionPane.ERROR_MESSAGE);
        }
    }
}

@Override
public void mouseDragged(MouseEvent e) {
    if (SwingUtilities.isLeftMouseButton(e)) {
        if (toolbaritem == 0) {
            g2.setColor(Color.BLACK);
            g2.setStroke(new BasicStroke(vastagsag));
            if (x != -1 && y != -1) {
                g2.drawLine(x, y, e.getX(), e.getY());
            }
            x = e.getX();
            y = e.getY();
            repaint();
        } else if (toolbaritem == 1) {
            g2.setColor(Color.RED);
            g2.setStroke(new BasicStroke(vastagsag));
            if (x != -1 && y != -1) {
                g2.drawLine(x, y, e.getX(), e.getY());
            }
            x = e.getX();
            y = e.getY();
            repaint();
        } else if (toolbaritem == 2) {
            g2.setColor(Color.GREEN);
            g2.setStroke(new BasicStroke(vastagsag));
            if (x != -1 && y != -1) {
                g2.drawLine(x, y, e.getX(), e.getY());
            }
            x = e.getX();
            y = e.getY();
            repaint();
        } else if (toolbaritem == 3) {
            g2.setColor(Color.BLUE);
            g2.setStroke(new BasicStroke(vastagsag));
            if (x != -1 && y != -1) {
                g2.drawLine(x, y, e.getX(), e.getY());
            }
            x = e.getX();
            y = e.getY();
            repaint();
        } else if (toolbaritem == 4) {
            g2.setColor(Color.WHITE);
            g2.setStroke(new BasicStroke(vastagsag*2));
            if (x != -1 && y != -1) {
                g2.drawLine(x, y, e.getX(), e.getY());
            }
            x = e.getX();
            y = e.getY();
            repaint();
        }
    }
}

@Override
public void mouseMoved(MouseEvent e) {
    x = -1;
    y = -1;

}

public void pencil() {

    toolbaritem = 0;
    System.out.println(toolbaritem);

}

public void piros() {

    toolbaritem = 1;
    System.out.println(toolbaritem);

}

public void zold() {
    toolbaritem = 2;
    System.out.println(toolbaritem);
}

public void kek() {
    toolbaritem = 3;
    System.out.println(toolbaritem);
}

public void radir() {

    toolbaritem = 4;
    System.out.println(toolbaritem);

}

public void vekony() {

    vastagsag = 1;
    System.out.println(vastagsag);

}

public void kozepes() {

    vastagsag = 5;
    System.out.println(vastagsag);

}

public void vastag() {

    vastagsag = 10;
    System.out.println(vastagsag);

}
以下是我的计划图片,以便于更好地理解:


用白色背景填充图像后,可以在背景上绘制图像

因此,首先通过对要加载的图像的文件名进行硬编码,使代码正常工作。一旦这样做,您就可以从JFileChooser获取文件名

基本准则是:

g2.fillRect(0, 0, 3000, 2000);
File filename = new File("someFle.jpg");
BufferedImage fileImage = ImageIO.read( filename );
g2.drawImage(fileImage, 0, 0, null);

您可能需要更改x/y偏移以使图像在白色背景上居中

从您提供的这3行代码中,我能够解决我的问题,谢谢您:)