3

JPanel で (マウスを使って) 画像の上に描画しようとしていますが、これは機能していますが、パネルのスクリーンショットを撮ってこの画像を生成しようとすると、描画せずに画像の背景しか見えませんハツカネズミ。

これは、背景 Panel.javaを生成するための私のコードです

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(this.createImage("/imagenes/cuerpoHumano.png").getImage(), 0, 0, null);
}

これは、画像の上に鉛筆として描画する私のコードです: Panel.java

private void formMouseDragged(java.awt.event.MouseEvent evt) {
    x = evt.getX();
    y = evt.getY();

    this.getGraphics().setColor(Color.RED);
    this.getGraphics().fillOval(x, y, 4, 4);
}                                 

これはスクリーンショットを生成するコードです

Dimension size = panel.getSize();
BufferedImage image = (BufferedImage) panel.createImage(size.width, size.height);
Graphics g = image.getGraphics();
panel.paint(g);
g.dispose();
try {
    String fileName = UUID.randomUUID().toString().substring(0, 18);
    ImageIO.write(image, "jpg", new File(path, fileName + ".jpg"));

} catch (IOException e) {
    e.printStackTrace();
}
4

2 に答える 2

3

スクリーンショットを撮っているときに、paintComponent()メソッドが呼び出されます。これは、画像のみを描画することを意味します。paintComponent()マウスの動きをモデル内に保存し、メソッドでモデルの内容をペイントする必要があります。repaint()このメソッドは、マウスの移動中にパネルで呼び出すことによってトリガーされます。

于 2012-08-25T19:28:21.367 に答える
0

これは機能するコードだと思います。

public class PanelImagenCuerpoHumano extends JPanel {

    private int x = -1;
    private int y = -1;
    private Image image = null;
    private ArrayList<Point> puntos = new ArrayList<Point>();

    public PanelImagenCuerpoHumano() {

        image = new ImageIcon(getClass()
            .getResource("/imagenes/cuerpoHumano.png")).getImage();

        this.addMouseMotionListener(new MouseMotionListener() {

            @Override
            public void mouseDragged(MouseEvent e) {
                x = e.getX();
                y = e.getY();
                puntos.add(new Point(x, y));
                repaint();
            }

            @Override
            public void mouseMoved(MouseEvent e) {
            }
        });
    }

    @Override
    protected void paintComponent(Graphics g) {

        g.drawImage(image, 0, 0, null);
        for (Point p : puntos) {
            g.setColor(Color.red);
            g.fillOval(p.x, p.y, 3, 3);
        }
    }
}
于 2012-08-25T22:48:17.183 に答える