Question

I was trying to manipulate an amateur animation using Swing in Java. The goal was to start an animation if I hover over a certain button. That was easy. But the problem is, I want to manipulate the speed of the timer of the animation according to the coordinates of the button.

For example, the more right I go on the button the more speedy the animation gets (delay time decreases) and vice-versa. The code I wrote works if I move the arrow out of the button then enter again. Then the delay changes according to co-ordinates. But not if I move the arrow within the region of the button. I used mouseEntered here. That may cause cause the problem. But the mouseMove function seems not to work too.

Here's my code:

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);
  }
}
Was it helpful?

Solution

But the mouseMove function seems not to work too.

The mouseMoved event is generated by a MouseMotionListener (not a MouseListener) so you will also need to implement that listener to manipulate the Timer interval.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top