Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda dibujo en java

Me gustaría saber si alguien me podría ayudar a hacer lo siguiente:

Necesito hacer un programa en java que me permita dibujar a "mano alzada" en un JPanel para después guardar ese dibujo en un archivo .png, no encuentro la manera de hacerlo y estaré muy agradecido si me ayudan por favor. De antemano gracias y espero su respuesta. saludos

septiembre 5, 2013 | Unregistered Commenterdreadber

Cuando dices 'ayuda', supongo que dices que te lo den hecho. Voila:


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Path2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class PenDemoPanel extends JPanel {

private Point start;
private Point stop;
private Shape shape;

public PenDemoPanel() {
setBackground(Color.white);
setPreferredSize(new Dimension(600, 600));
PathListener listener = new PathListener();
addMouseListener(listener);
addMouseMotionListener(listener);
}

@Override
public void paintComponent(Graphics gc) {
super.paintComponent(gc);

Graphics2D g2 = (Graphics2D) gc;

if (start != null && stop != null) {
BasicStroke stroke = new BasicStroke(1);
Shape strokedShape = stroke.createStrokedShape(shape);
g2.draw(strokedShape);
g2.fill(strokedShape);
}
}

private class PathListener extends MouseAdapter {

@Override
public void mousePressed(MouseEvent event) {
start = event.getPoint();
Path2D path = new Path2D.Double();
shape = path;
}

@Override
public void mouseDragged(MouseEvent event) {
stop = event.getPoint();

Path2D path = (Path2D) shape;
path.moveTo(start.x, start.y);
path.lineTo(stop.x, stop.y);
shape = path;
start = stop;

repaint();
}

@Override
public void mouseReleased(MouseEvent event) {
Path2D path = (Path2D) shape;
try {
path.closePath();
} catch (Exception ingore) {}
shape = path;
repaint();
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
PenDemoPanel shapes = new PenDemoPanel();

JFrame frame = new JFrame("PenDemo");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(shapes);

frame.pack();
frame.setVisible(true);
}
});
}
}

Y para guardar como PNG:

BufferedImage bi = new BufferedImage(this.getSize().width, this.getSize().height, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
this.paint(g); //this == JComponent
g.dispose();
try{ImageIO.write(bi,"png",new File("test.png"));}catch (Exception e) {}

Un saludo

septiembre 6, 2013 | Unregistered CommenterUnoPorAhi