код для простых набросков не работает хорошо

1

Я новичок в 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);

   }

}

Может кто-нибудь, пожалуйста, скажите мне, что не так. Пожалуйста, предложите мне. Заранее спасибо.

Теги:
graphics
swing

1 ответ

2
Лучший ответ
        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 следует защищать, а не публично.
  • Вы должны вызвать метод super paintComponent в своем собственном переопределении.
  • Пожалуйста, взгляните на этот пример.

редактировать
Ваш комментарий:

Мое приложение может рисовать как краска... поэтому при перетаскивании мыши каждый раз, когда начальная и конечная координаты будут меняться

Затем у вас есть два варианта: использование ArrayList<ArrayList<Point>> или рисование на BufferedImage и отображение BufferedImage в вашем методе paintComponent.

  • 0
    Мое приложение может рисовать как краска ... поэтому при перетаскивании мыши каждый раз начальная и конечная координаты будут меняться ....
  • 0
    @sovon: тогда у вас есть два варианта: использовать ArrayList<ArrayList<Point>> или рисовать на BufferedImage

Ещё вопросы

Сообщество Overcoder
Наверх
Меню