Java 如何使用JFileChooser将图片加载到现有白色背景
我已经创建了一个类似绘画的小程序,我想知道是否可以将一张图片(.jpg.png)加载到我的“白色工作表”中并在上面画画。以下是我的源代码: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
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行代码中,我能够解决我的问题,谢谢您:)