重绘功能不起作用..

时间:2012-04-02 03:47:25

标签: java repaint

我的重绘功能有问题

编译时,错误是

pc3@pc3-desktop:~/Desktop$ javac LoadImageApp.java 
LoadImageApp.java:17: cannot find symbol
symbol  : method repaint(int,int,int,int,int)
location: class java.awt.Graphics
g.repaint(1000,0,0,1440,900)
 ^
1 error

这是我的代码 - >

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;


public class LoadImageApp extends Component {

BufferedImage img;

public void paint(Graphics g) {
    g.drawImage(img, 0, 0, null);
super.update(g);
g.repaint(1000,0,0,1440,900);
      }

public LoadImageApp() {
try{
   img = ImageIO.read(new File("screenshot.jpg"));
  }catch(IOException e){}
 }

 public Dimension getPreferredSize() {
    if (img == null) {
            return new Dimension(100,100);
    } else {
       return new Dimension(img.getWidth(null), img.getHeight(null));
   }
 }

public static void main(String[] args) {

    JFrame f = new JFrame("Load Image ");

    f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
         });

 f.add(new LoadImageApp());
     f.pack();
     f.setVisible(true);



   }
}
谁能告诉我这是什么问题?我打算做一个显示图像的程序,每隔0.1秒保持刷新一次。图像将从其他机器接收,每0.1秒一次,图像将保持覆盖旧图像..

提前感谢那些回复的人..谢谢!!!!!!

2 个答案:

答案 0 :(得分:2)

我强烈建议您阅读Swing教程,并了解Graphics类和Component类中定义的方法。更具体地说,您对该声明的期望是什么:

g.repaint(1000, 0, 1440, 900)

要做什么?如果它根据某个间隔重新绘制您的某个组件,则可以使用TimerTask执行此操作。另外,通过阅读教程,您将看到为什么会出现编译错误。 repaint上没有定义Graphics方法。

作为旁注,请不要为方法绘画命名 - 因为paint

中已经定义了Component方法,所以令人困惑

答案 1 :(得分:1)

我实际上并不知道您在哪里找到了repaint Graphics方法签名,因为它不存在。

您应该在组件上调用重绘,该组件是指定Graphics的所有者,LoadImageApp本身。

但首先你绝对需要更好地研究绘画如何与AWT和Swing一起使用,看看here

另外,你应该使用一些安排更新阶段的东西,否则你的代码就没有任何意义了。没有任何东西可以周期性地加载想象力,也没有任何重新绘制框架的东西。我建议像Amir告诉你的那样TimerTask