Нарисуйте линию на Jpanel при перетаскивании мыши
Я хочу нарисовать 2 (или более) линии на JPanel, когда мышь тянет. Когда я используюsuper.paintComponent(g)
в моем коде я не могу нарисовать 2 линии на панели, однако, когда я не используюsuper.paintComponent(g)
; результат ужасный, как на картинке ниже:
Я понимаю, почему линии вели себя так.
Как я могу нарисовать линии на Jpanel при перетаскивании мыши?
Кстати, линия, проведеннаяg2d.draw(line2d)
иногда это не гладкая линия (рис. ниже)
Мои коды пока:
<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>
}