[英]How can I remove all lines while Drawing in jPanel in java?
我正在嘗試使用java制作Paint程序,但jPanel中有三個事件可以畫線。 我的問題是,當我繪制新線時,第一條線被刪除(我認為拖動事件中的問題!)..依此類推。 請注意,在拖動鼠標時,該行將停留在鼠標上,這是我的事件代碼:
private void jPanel1MousePressed(java.awt.event.MouseEvent evt) {
g1=(Graphics2D) jPanel1.getGraphics();
p1=jPanel1.getMousePosition();
}
JLayer lpane;
private void jPanel1MouseDragged(java.awt.event.MouseEvent evt) {
if(p1!=null){
lpane = new JLayer();
jPanel1.add(lpane, BorderLayout.CENTER);
lpane.setBounds(0, 0, 328, 257);
g2=(Graphics2D) lpane.getGraphics();
l=new Line(p1.x,p1.y,jPanel1.getMousePosition().x,jPanel1.getMousePosition().y);
l.draw(g2);
//lpane.repaint();
lpane.setVisible(false);
lpane.removeAll();
lpane.disable(); jPanel1.remove(lpane);
}
}
private void jPanel1MouseReleased(java.awt.event.MouseEvent evt) {
if(p1!=null)
{
g1=(Graphics2D) jPanel1.getGraphics();
p2=jPanel1.getMousePosition();
l=new Line(p1.x,p1.y,p2.x,p2.y);
g1.setColor(Color.red);
l.draw(g1);
p1=null;
}
}
Graphics2D g1,g2; Point p1=null,p2=null; Line l;
getGraphics
不是應該在Swing中完成繪制的方法,而是覆蓋面板paintComponent
並在那里繪制組件狀態。
paintComponent
方法需要在每次調用時就知道要繪制什么內容,因為在沒有您的交互或知識的情況下,它可以被調用多次,多次。
一種方法是構建形狀或Point
的List
,然后可以在每次調用paintComponent
對其進行循環和繪制。 這樣做的好處是,您可以根據需要刪除這些形狀/點。
有關更多細節,請參見固定在AWT中以及進行搖擺和執行自定義繪畫
還要看一下這個例子 ,
這樣做的通常方法是創建一個(Component)大小的(Buffered)Image,填充背景色,然后在Image上也繪制每行。 在paintComponent方法中,您只需調用g.drawImage(...);。
在您的面板中:
public void paintComponent(Graphics g) {
if (mSizeChanged) {
handleResize();
}
g.drawImage(mImg, 0, 0, null);
}
在您的MouseMotionListener中:
public void mouseDragged(MouseEvent me) {
Graphics g = mImg.getGraphics();
Point p = me.getPoint();
g.drawLine(mLastPoint.x, mLastPoint.y, p.x, p.y); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.