Muneeb Mughal:
Estoy desarrollando una aplicación para un cliente y me obliga a extraer algunas líneas sobre una imagen. He buscado sobre stackoverflow un poco de ayuda y logró llamar la línea utilizando JLayeredPane pero las líneas anteriores se desvanecen cada vez que haga clic para hacer nuevas líneas. He aquí el fragmento de código (no es exactamente la mía).
public class Test2
{
private JFrame frame = new JFrame();
private JLayeredPane lpane = new JLayeredPane();
private JPanel panel1 = new MyPanel("C:\\Users\\mumm\\Desktop\\map.jpg");
private JPanel panel2 = new JPanel();
public Test2()
{
frame.setPreferredSize(new Dimension(600, 400));
frame.setLayout(new BorderLayout());
frame.add(lpane, BorderLayout.CENTER);
lpane.setBounds(0, 0, 600, 400);
panel1.setBounds(0, 0, 600, 400);
panel1.setOpaque(true);
panel2.setBounds(200, 100, 100, 100);
panel2.setOpaque(false);
lpane.add(panel1, 0, 0);
lpane.add(panel2, 1, 0);
frame.pack();
frame.setVisible(true);
}
class MyPanel extends JPanel implements MouseListener, MouseMotionListener
{
private String imageFile;
private int index = 0;
private Point[] arr = new Point[100000];
public MyPanel(String imageFile)
{
this.imageFile = imageFile;
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
@Override
protected void paintComponent(Graphics g) {
Image img = new ImageIcon(imageFile).getImage();
g.drawImage(img, 0, 0, this);
for (int i = 0; i < index - 1; i++)
g.drawLine(arr[i].x, arr[i].y, arr[i + 1].x, arr[i + 1].y);
}
@Override
public void mousePressed(MouseEvent e)
{
arr[index] = new Point(e.getX(), e.getY());
index++;
System.out.println(index);
repaint();
}
@Override
public void mouseReleased(MouseEvent e)
{
arr = new Point[100000];
index = 0;
}
@Override
public void mouseDragged(MouseEvent e)
{
arr[index] = new Point(e.getX(), e.getY());
index++;
System.out.println(index);
repaint();
}
}
public static void main(String[] args) {
new Test2();
}
Básicamente lo que quiero es algo como esto.
Cualquier tipo de ayuda será apreciada.
Johan periodo:
Creo que es debido a que limpie la matriz en mouseReleased
que se desencadena después de que el último evento de arrastre ha dibujado la línea.
Se podría ver esto si se llama a partir de repintado mouseReleased
.
Detener la limpieza de la matriz y que debería estar bien.