Je suis en train de construire un système avec une toile où l'utilisateur peut dessiner des lignes en faisant glisser la souris en Java. Je veux que tous les traits soient stockés et affichés. Cependant, lorsque j'appuie sur la souris pour dessiner une nouvelle ligne, les lignes précédentes sont automatiquement effacées, ce qui n'est pas ce à quoi je m'attendais. Comment puis-je résoudre ce problème?Pourquoi les lignes tracées sont-elles effacées automatiquement?
Voici mon code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FreeDrawing extends JPanel implements MouseListener, MouseMotionListener {
private int indexOfStroke = 0;
private int indexOfPoint = 0;
private Stroke[] strokes = new Stroke[50];
private Point[] currentPoints = new Point[500];
public FreeDrawing(String name) {
super();
this.addMouseListener(this);
this.addMouseMotionListener(this);
JFrame fr = new JFrame(name);
fr.add(this);
fr.setSize(500, 500);
setBackground(Color.GRAY);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setVisible(true);
}
public void paintComponent(Graphics g) {
System.out.println("Paint");
super.paintComponents(g);
strokes[indexOfStroke] = new Stroke();
for (int i = 0; i < indexOfPoint - 1; i++) {
System.out.println("Really draw");
g.drawLine(currentPoints[i].x, currentPoints[i].y, currentPoints[i + 1].x, currentPoints[i + 1].y);
}
}
public void mouseDragged(MouseEvent e) {
System.out.println("Drag");
currentPoints[indexOfPoint] = new Point(e.getX(), e.getY());
indexOfPoint++;
repaint();
}
public void mousePressed(MouseEvent e) {
System.out.println("Press");
currentPoints[indexOfPoint] = new Point(e.getX(), e.getY());
indexOfPoint = 0;
repaint();
}
public void mouseReleased(MouseEvent e) {
indexOfPoint = 0;
indexOfStroke++;
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
public static void main(String[] args) {
FreeDrawing canvas = new FreeDrawing("Mouse");
}
}
class Stroke {
public Stroke() {
System.out.println("Stroke initiated");
points = new Point[500];
}
Point[] points;
}
Parce que, voilà comment les travaux de peinture, voir [Peinture en AWT et swing] (http: // www.oracle.co m/technetwork/java/painting-140037.html) et [Performing Custom Painting] (http://docs.oracle.com/javase/tutorial/uiswing/painting/) pour plus de détails. Fondamentalement, la peinture est destructrice, ce qui signifie que chaque fois que 'paintComponent' est appelé, vous devez repeindre l'état complet du composant à partir de zéro – MadProgrammer
Une chose que vous pourriez envisager est de créer une classe qui contient le trait, la couleur et vous pointe besoin de chaque ligne et de stocker dans une liste '' chaque fois que vous cliquez sur – MadProgrammer
Merci beaucoup de le souligner. Mais comment puis-je dessiner des traits multiples dans un panneau? –