我尝试每秒向右移动(x ++)
我尝试用线程移动它..
继承人我试试..
public class help {
JFrame frame = new JFrame();
JLabel label = new JLabel("target");
public help() {
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(800,600);
frame.setLayout(new GridLayout());
frame.add(label);
label.setPreferredSize(new Dimension(100,100));
label.setLocation(400, 300);
frame.getContentPane().validate();
frame.repaint();
frame.setVisible(true);
mysterious();
}
void mysterious(){
////////////////////////////////
// part of edit responding David kroukamp
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try{
for (int z=0; z<10; z++){
label.setLocation((label.getLocationOnScreen().x+10), label.getLocationOnScreen().y);
Thread.sleep(1000);
}
}catch(Exception ae){
}
}
});
t.start();
//////////////////////////////
}
public static void main(String[]args){
new help();
}
}
非常感谢任何帮助
答案 0 :(得分:6)
Help
Event Dispatch Thread
新的Thread
就像这样创建:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
//work here
}
});
t.start();//start thread
然而,我建议在Timer
上运行Swing EDT
:
修改强>
根据您的问题,我建议使用Timer
创建线程点是为了一般知识。
问题是Thread没有在你的swing GUI的EDT Thread上运行,而Timer
就是这样:
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
int count=0;
public void actionPerformed(ActionEvent evt) {
if(count==10) {//we did the task 10 times
((Timer)evt.getSource()).stop();
}
label.setLocation((label.getLocationOnScreen().x+10), label.getLocationOnScreen().y);
System.out.println(SwingUtilities.isEventDispatchThread());
count++;
}
};
new Timer(delay, taskPerformer).start();
<强>参考:强>
答案 1 :(得分:2)
以下是简单益智游戏的Swing
示例。
当您按下Pause
按钮时,标题将获得动画,直到您释放暂停为止。同样,您可以将其用于JLabel
。源代码也附后。
希望对你有所帮助。
答案 2 :(得分:1)
如果你把构造函数的那一部分放在一个线程中,那么你可以调用thread.sleep(1000);
(1000毫秒,延迟1秒),然后刷新,这应该将目标移动到屏幕上。