Dibuja la línea en el Jpanel al arrastrar el ratón
Quiero dibujar 2 (o más) líneas en JPanel cuando el mouse se arrastra. Cuando yo usosuper.paintComponent(g)
en mi código, no pude dibujar 2 líneas en el panel, sin embargo, cuando no usosuper.paintComponent(g)
;, el resultado es feo, como la foto de abajo:
Entiendo por qué las líneas se comportaron así.
¿Cómo podría dibujar las líneas en Jpanel al arrastrar el mouse? Por cierto, la línea trazada porg2d.draw(line2d)
a veces no es la línea suave (foto abajo)
Mis códigos hasta ahora:
<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>
}