2013-10-09 66 views
0

這裏是我的代碼repaint()Java中的方法不調用paint()方法?

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

import com.leappainter.model.GetXYCoordinatesPOJO; 

public class DrawXY extends JPanel { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private int x; 
    private int y; 
    private int d; 

    public int getX() { 
     return x; 
    } 
    public void setX(int x) { 
     this.x = x; 
    } 
    public int getY() { 
     return y; 
    } 
    public void setY(int y) { 
     this.y = y; 
    } 
    public int getD() { 
     return d; 
    } 
    public void setD(int d) { 
     this.d = d; 
    } 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setColor(Color.RED); 
     g2d.drawOval(getX(), getY(), 30, 30); 
     System.out.println("painting"); 
    } 
    public void draw() { 
     JFrame frame = new JFrame("Leap Draw"); 
     frame.add(new DrawXY()); 
     frame.setSize(600, 600); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
    public void update(GetXYCoordinatesPOJO getxy) { 
     // TODO Auto-generated method stub 
     setX((int) getxy.getX()); 
     setY((int) getxy.getY()); 
     setD((int) getxy.getD()); 

     //System.out.println(getX()); 

     DrawXY draw = new DrawXY(); 
     draw.repaint(); 
     try { 
      Thread.sleep(10); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

更新方法過得去功能,更新的價值,但該paint方法是沒有得到2次後叫叫。

+2

不要在JComponent上重寫'paint'。改寫'paintComponent'。請參閱[在AWT和Swing中繪製]的此部分(http://www.oracle.com/technetwork/java/painting-140037.html#callbacks)。 – VGR

+0

我沒有看到任何調用update()方法的代碼。我也不知道你爲什麼使用Thread.sleep()。調用update()方法的代碼應負責調度更新。 – camickr

+0

這個更新是由一個在另一個線程中運行並且工作正常的方法調用的。我通過打印x,y,d值來檢查。 – Ananda

回答

1

您正在調用另一個實例的重繪!

更改...

public void update(GetXYCoordinatesPOJO getxy) { 
    // TODO Auto-generated method stub 
    setX((int) getxy.getX()); 
    setY((int) getxy.getY()); 
    setD((int) getxy.getD()); 

    //System.out.println(getX()); 

    DrawXY draw = new DrawXY(); // < -- YOU CREATE NEW INSTANCE HERE 
    draw.repaint(); 
    try { 
     Thread.sleep(10); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void update(GetXYCoordinatesPOJO getxy) { 
    // TODO Auto-generated method stub 
    setX((int) getxy.getX()); 
    setY((int) getxy.getY()); 
    setD((int) getxy.getD()); 

    //System.out.println(getX()); 

    repaint(); 
    try { 
     Thread.sleep(10); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

而看到VGR的評論... +1他。

+0

仍然不能解決同樣的問題。 – Ananda