我的查询类似于这个问题
用鼠标在画布上画线: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();
}
}
有人可以帮助我解决这些问题吗?
getGraphics
从来都不是执行自定义绘制的写入方式。
首先通读 AWT 中的绘画和摆动和执行自定义绘画,以更好地了解绘画的工作原理以及您应该如何使用它。
简单的答案是,您需要维护已绘制内容的模型,以便在每次绘制通道上都可以重新绘制它。
例如,在不重新验证的情况下调整面板大小,用鼠标拖动绘制圆的轨迹,为什么我的线没有绘制?