在java swing中操纵时间

时间:2014-03-30 16:10:42

标签: java swing timer jbutton

我试图在Swing中使用Java来操纵业余动画。我的目标是,如果我将鼠标悬停在某个button上,就会启动动画。那很简单。但问题是,我想根据按钮的坐标来操纵动画计时器的速度。

例如,我对button越正确,动画越快(延迟时间减少),反之亦然。如果我将箭头移出按钮然后再次输入,我编写的代码就可以工作。然后延迟根据坐标而变化。但是如果我在按钮区域内移动箭头则不行。我在这里使用了mouseEntered。这可能会导致问题。但是mouseMove函数似乎也不起作用。

这是我的代码:

private void jButton1MouseEntered(java.awt.event.MouseEvent evt)
{
  // TODO add your handling code here:
  PointerInfo inf = MouseInfo.getPointerInfo();
  Point a = inf.getLocation();
  double x = a.getX();
  final int n = (int) (x - 161);
  //String str=""+x;
  //Output.setText(str);
  ActionListener taskPerformer = null;
  taskPerformer = new ActionListener()
  {
    @Override
    public void actionPerformed(ActionEvent evt)
    {
      //...Perform a task...
      //if(t>0)timer.setDelay(1000);
      if (t > 0)
      {

        timer.setDelay(500 + 50 * n);
      }

      if (label1 == 0)
      {
        jTextField1.setText(" A");
      }
      else if (label1 == 1)
      {
        jTextField1.setText(" B");
      }
      else if (label1 == 2)
      {
        jTextField1.setText(" C");
      }
      else if (label1 == 3)
      {
        jTextField1.setText(" D");
      }
      else if (label1 == 4)
      {
        jTextField1.setText(" E");
      }
      else if (label1 == 5)
      {
        jTextField1.setText(" F");
      }
      else if (label1 == 6)
      {
        jTextField1.setText(" G");
      }

      if (label1 >= 7)
      {
        label1 = 0;
      }
      else
      {
        label1++;
      }

      t++;

      //System.out.printf("Reading SMTP Info. %d\n",x);

      //System.out.printf("Reading SMTP Info. %d\n",label1t);
      //jLabel3.setText("fsd");
    }

    private Object getContentPane()
    {
      throw new UnsupportedOperationException("Not supported yet.");
    }
  };

  timer = new Timer(500, taskPerformer);
  timer.start();

  //timer.setRepeats(false);
  try
  {
    Thread.sleep(10);
  }
  catch (InterruptedException ex)
  {
    Logger.getLogger(Keyboard_Gui.class.getName()).log(Level.SEVERE, null, ex);
  }
}

1 个答案:

答案 0 :(得分:0)

  

但是mouseMove函数似乎也不起作用。

mouseMoved事件由MouseMotionListener(不是MouseListener)生成,因此您还需要实现该侦听器来操作Timer间隔。