pre*_*per 4 java swing paint draw
我基本上试图做一些经典的"Paint"(微软的程序).但我想在绘画时使用图层.我以为我可以使用JPanel组件作为图层.
我正在测试下面的代码.目标是用鼠标绘制一个矩形.在拖动鼠标时有一个临时图层(temp)可以在它上面绘制,当鼠标释放时,有一个实际的图层(区域)可以绘制.但每当我开始绘制一个新的矩形时,旧的矩形就会消失.此外,如果我再次执行setVisible(false)和true,一切都会消失.
MouseInputAdapter mia = new MouseInputAdapter() {
private int startx = 0, starty = 0, stopx = 0, stopy = 0;
public void mousePressed(MouseEvent evt) {
startx = evt.getX();
starty = evt.getY();
}
public void mouseDragged(MouseEvent evt) {
Graphics2D tempg = (Graphics2D) temp.getGraphics();
int width = Math.abs(startx - evt.getX());
int height = Math.abs(starty - evt.getY());
int x = evt.getX(), y = evt.getY();
if(x > startx)
x = startx;
if(y > starty)
y = starty;
Rectangle r = new Rectangle(x, y, width, height);
tempg.clearRect(0, 0, getWidth(), getHeight());
tempg.draw(r);
}
public void mouseReleased(MouseEvent evt) {
Graphics2D g = (Graphics2D) area.getGraphics();
stopx = evt.getX();
stopy = evt.getY();
int width = Math.abs(startx - stopx);
int height = Math.abs(starty - stopy);
int x = startx, y = starty;
if(x > stopx)
x = stopx;
if(y > stopy)
y = stopy;
Rectangle r = new Rectangle(x, y, width, height);
g.draw(r);
}
};
area.addMouseListener(mia);
area.addMouseMotionListener(mia);
temp.addMouseListener(mia);
temp.addMouseMotionListener(mia);
Run Code Online (Sandbox Code Playgroud)
这段代码出了什么问题?
小智 6
每次重新粉刷都无法保证您在离开状态时获得相同的图形.
两个两步代替:
使用列表很好,因为列表开头的项目将在最后的下面绘制.
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |