Я новичок в java, а также в java Graphics. Я написал простой код для эскизов, но он не работает хорошо. когда я немного перетаскиваю мышь, некоторые пиксели пропущены. Вот мой код..
package test;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
public class testdraw extends JPanel{
public int x1;
public int y1;
public int x2;
public int y2;
public testdraw(){
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e){
x2=e.getX();
y2=e.getY();
repaint();
x1=x2;
y1=y2;
}
});
}
public void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D)g;
g2.drawLine(this.x1, this.y1,this.x2,this.y2);;
}
}
Основной класс..
package test;
import javax.swing.JFrame;
public class testdrawmain {
public static void main(String args[]){
JFrame frame=new JFrame();
testdraw td=new testdraw();
frame.add(td);
frame.setSize(350, 350);
frame.setVisible(true);
}
}
Может кто-нибудь, пожалуйста, скажите мне, что не так. Пожалуйста, предложите мне. Заранее спасибо.
x2=e.getX();
y2=e.getY();
repaint();
x1=x2;
y1=y2;
x1 и x2 будут одинаковыми после этого, независимо от того, где вы вызываете repaint()
- не очень полезно.
Вместо этого выполняйте задание, прежде чем получить позицию мыши.
x1=x2;
y1=y2;
x2=e.getX();
y2=e.getY();
repaint();
Если вы хотите нарисовать все точки, тогда создайте ArrayList<Point>
, добавьте в список в прослушиватель движения мыши и в paintComponent повторите этот список.
Также:
paintComponent
следует защищать, а не публично.paintComponent
в своем собственном переопределении. редактировать
Ваш комментарий:
Мое приложение может рисовать как краска... поэтому при перетаскивании мыши каждый раз, когда начальная и конечная координаты будут меняться
Затем у вас есть два варианта: использование ArrayList<ArrayList<Point>>
или рисование на BufferedImage и отображение BufferedImage в вашем методе paintComponent.
ArrayList<ArrayList<Point>>
или рисовать на BufferedImage