2015-12-12 94 views
0

我想製作一個GUI程序,當我按下鼠標按鈕時,將標籤移動到按下的X的位置, Y地點。我做到了,這很容易,但我想現在就像一個緩慢移動的效果。我試圖用thread.sleep()這樣做,但它沒有奏效。你能幫我提出一些想法或代碼嗎?這是我的代碼:如何用swing在一個JAVA中移動一個標籤(圖片)點擊鼠標的位置

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

public class jGame extends JFrame { 

private JPanel contentPane; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       jGame frame = new jGame(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public jGame() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 568, 459); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(new BorderLayout(0, 0)); 

    JPanel panel = new JPanel(); 
    contentPane.add(panel, BorderLayout.CENTER); 

    JLabel robot = new JLabel(""); 
    robot.setIcon(new ImageIcon("/home/ubuntu/Desktop/robot.png")); 
    panel.add(robot); 
    panel.addMouseListener(new MouseListener() { 

     @Override 
     public void mouseClicked(MouseEvent e) { 
      robot.setLocation(e.getX() - 25, e.getY() - 40); 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 

     } 

     @Override 
     public void mousePressed(MouseEvent e) { 

     } 

     @Override 
     public void mouseExited(MouseEvent e) { 

     } 

     @Override 
     public void mouseEntered(MouseEvent e) { 

     } 
    }); 
} 

} 

,這裏是我的形象使用:
robot

+0

我會建議使用此計時器。這樣你就可以將速度調整到任何你想要的。 – DevilsHnd

+0

你能告訴我如何在我的代碼中做到這一點,或編輯一些簡單例子的代碼。 – drage503

回答

1

寫作是一種樂趣......

  1. 商店startPoint & nextStepPoints
  2. 初始化javax.swing.Timer
  3. 當用戶單擊時,保存根startPoint,將nextStep設置爲鼠標位置並呼叫timer.start()
  4. Timer.actionPerformed()需要計算nextStep點,因爲它移回到startPoint
  5. 如果等於的startPoint電話NEXTSTEP timer.stop()
+0

你能告訴我如何以及在哪裏初始化我的定時器,請按鼠標點擊。 – drage503

相關問題