Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计时器未在JPanel中启动_Java_Swing_Timer - Fatal编程技术网

Java 计时器未在JPanel中启动

Java 计时器未在JPanel中启动,java,swing,timer,Java,Swing,Timer,我试图在JPanel中移动一个图像,静态变量x和y是使用opencv在另一个类中更改的红色坐标。这里计时器没有启动。请告诉我哪里错了 class ImageFollowingPanel extends JPanel { private final BufferedImage image; private Point imagePosition = new Point(150, 150); private Point redPoint; private doubl

我试图在JPanel中移动一个图像,静态变量x和y是使用opencv在另一个类中更改的红色坐标。这里计时器没有启动。请告诉我哪里错了

class ImageFollowingPanel extends JPanel
{

    private final BufferedImage image;
    private Point imagePosition = new Point(150, 150);
    private Point redPoint;
    private double imageAngleRad = 0;
    public static int x, y;
    public ImageFollowingPanel()
    {
        BufferedImage i = null;
        try
        {
            i = ImageIO.read(new File("forward.png"));
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        image = i;

        ActionListener taskPerformer = new ActionListener()
        {

            public void actionPerformed(ActionEvent evt)
            {
                if (redPoint != null)
                {

                    int centerX = imagePosition.x + (image.getWidth() / 2);
                    int centerY = imagePosition.y + (image.getHeight() / 2);

                    if (redPoint.x != centerX)
                    {
                        imagePosition.x += redPoint.x < centerX ? -1 : 1;
                    }
                    if (redPoint.y != centerY)
                    {
                        imagePosition.y += redPoint.y < centerY ? -1 : 1;
                    }
                    System.out.println("mouse:::  x : " + x + "y :" + y);
                    redPoint.x = x;
                    redPoint.y = y;
                    double dx = x - imagePosition.getX();
                    double dy = y - imagePosition.getY();
                    imageAngleRad = Math.atan2(dy, dx);
                    repaint();
                }
            }
        };
        Timer timer = new Timer(1000, taskPerformer);
        timer.start();
    }

    protected void paintComponent(Graphics gr)
    {
        super.paintComponent(gr);
        Graphics2D g = (Graphics2D) gr;
        g.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);

        int cx = image.getWidth() / 2;
        int cy = image.getHeight() / 2;
        AffineTransform oldAT = g.getTransform();
        g.translate(cx + imagePosition.x, cy + imagePosition.y);
        g.rotate(imageAngleRad);
        g.translate(-cx, -cy);
        g.drawImage(image, 0, 0, null);
        g.setTransform(oldAT);

    }
}
class ImageFollowPanel扩展了JPanel
{
私有最终缓冲图像;
专用点imagePosition=新点(150150);
私人红点;
专用双映像角度rad=0;
公共静态int x,y;
公共事务委员会()
{
BuffereImage i=null;
尝试
{
i=ImageIO.read(新文件(“forward.png”);
}
捕获(IOE异常)
{
e、 printStackTrace();
}
图像=i;
ActionListener taskPerformer=新建ActionListener()
{
已执行的公共无效操作(操作事件evt)
{
如果(红点!=null)
{
int centerX=imagePosition.x+(image.getWidth()/2);
int centerY=imagePosition.y+(image.getHeight()/2);
如果(redPoint.x!=centerX)
{
imagePosition.x+=redPoint.x
每当计时器触发动作事件时,您都会检查
红点
是否为空,如果为空,则什么也不做。但是在你的代码中,红点总是空的,这就是为什么什么也没发生