簡體   English   中英

如何在Java中的jPanel中繪圖時刪除所有行?

[英]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方法需要在每次調用時就知道要繪制什么內容,因為在沒有您的交互或知識的情況下,它可以被調用多次,多次。

一種方法是構建形狀或PointList ,然后可以在每次調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM