Zeichnen Sie die Linie auf dem Jpanel, wenn Sie die Maus ziehen
Ich möchte 2 (oder mehr) Linien auf JPanel zeichnen, wenn die Maus zieht. Wenn ich benutzesuper.paintComponent(g)
In meinem Code konnte ich keine 2 Linien auf dem Panel zeichnen, wenn ich es jedoch nicht benutzesuper.paintComponent(g)
Das Ergebnis ist hässlich, wie auf dem Bild unten:
Ich verstehe, warum sich die Zeilen so verhielten.
Wie kann ich die Linien auf dem Jpanel zeichnen, wenn ich die Maus ziehe? Übrigens, die Linie vong2d.draw(line2d)
manchmal ist es nicht die glatte Linie (Bild unten)
Meine Codes bisher:
<code>import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.geom.Line2D; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; public class LineDrawing extends JPanel implements MouseMotionListener, MouseListener{ Point point1; Point point2; Line2D line2d; public LineDrawing(){ super(); addMouseListener(this); addMouseMotionListener(this); } @Override public void paintComponent(Graphics g){ //super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; if(point1!=null && point2!=null){ g2d.setPaint(Color.RED); g2d.setStroke(new BasicStroke(1.5f)); g2d.draw(line2d); } } @Override public void mouseDragged(MouseEvent e) { point2 = e.getPoint(); line2d = new Line2D.Double(point1, point2); repaint(); } @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { point1 = e.getPoint(); } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } public static void main(String a[]){ EventQueue.invokeLater(new Runnable(){ @Override public void run() { JFrame frame = new JFrame(); LineDrawing linedraw= new LineDrawing(); frame.add(linedraw); frame.setSize(500,500); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setVisible(true); } }); } </code>
}