Рисование линий на холсте с помощью мыши без Swing в Java - PullRequest
0 голосов
/ 30 марта 2019

Мой вопрос похож на этот вопрос

Рисование линий с помощью мыши на холсте: Java awt

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

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

import java.awt.*;
import java.awt.event.*;
class Drawing extends WindowAdapter implements MouseMotionListener, MouseListener, ComponentListener {

    Frame f;
    Canvas c;
    int X=400,Y=400;
    int px=-1,py=-1;
    int x,y;

    public Drawing() {
        f=new Frame("Drawing - Canvas");
        f.addWindowListener(this);
        f.addComponentListener(this);
        f.setSize(X,Y);
        c=new Canvas();
        f.add(c);
        c.addMouseMotionListener(this);
        c.addMouseListener(this);
        f.setVisible(true);
    }

    public void componentResized(ComponentEvent e) {}
    public void componentHidden(ComponentEvent e) {}
    public void componentMoved(ComponentEvent e) {}
    public void componentShown(ComponentEvent e) {}

    public void mouseMoved(MouseEvent e) {}
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}

    public void mouseDragged(MouseEvent e) {
        int x,y;
        x=e.getX();
        y=e.getY();
        Graphics g=c.getGraphics();

        if(px!=-1) {    
            g.drawLine(px,py,x,y);
        }
        else {
            g.drawLine(x,y,x,y);
        }

        px=x;
        py=y;
    }

    public void mouseReleased(MouseEvent e) {
        this.X=400; this.Y=400;
        this.px=-1; this.py=-1;
    }

    public void windowClosing(WindowEvent e) {
        f.dispose();
    }

    public static void main(String[] args) {
      Drawing c=new Drawing();
    }   
}

Может кто-нибудь помочь мне с этими проблемами?

1 Ответ

1 голос
/ 30 марта 2019

getGraphics НИКОГДА не является способом записи для выполнения пользовательского рисования.

Начните с прочтения Рисование в AWT и Swing и Выполнение пользовательской живописи для лучшего понимания того, как работает живопись и как с ней работать.

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

Например, Изменить размер панели без повторной проверки , Нарисуйте след из кругов с помощью мышиПодробный , Почему моя линия не рисуется?

...