마우스를 끌 때 JPanel에 2 줄 (그 이상)을 그립니다. 난 내 코드에서 super.paintComponent(g)
을 사용하면 내가 super.paintComponent(g)
를 사용하지 않는 그러나 때, 나는 패널에 2 선을 그릴 수없는, 결과는 아래의 그림처럼 추한 :마우스를 끌 때 Jpanel에 선을 그립니다.
I 선이 왜 그렇게 행동했는지 이해하십시오.
마우스를 끌 때 Jpanel에 선을 그릴 수있는 방법은 무엇입니까? BTW, g2d.draw(line2d)
에 의해 그려진 선은 때로는 부드러운 라인이 아니다 (아래 그림)
내 코드는 지금까지 :
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);
}
});
}
}
맞아, 사라졌습니다. 이유가 뭐야? –
감사합니다. BTW, paintComponent에 의해 그려진 선 - 가끔은 부드러운 선이 아닙니다. 그걸 어떻게 없앨 수 있니? –
나는 질문을 편집 했으므로 그림에서 볼 수있다. 선은 직선이 아니다. 나는 모든 라인이 아니라 일부 라인을 의미합니다. –