[英]how to move jlabel every second?
我嘗試每秒鍾將其移到右側(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();
}
}
非常感謝您的任何幫助
Help
Event Dispatch Thread
上創建和修改 這樣創建一個新Thread
:
Thread t = new Thread(new Runnable() { @Override public void run() { //work here } }); t.start();//start thread
但是我建議使用Swing Timer
因為它在EDT
運行:
編輯:
根據您的問題,我建議使用Timer
來創建線程點是為了了解一般知識。
該探針的問題是該線程未在您的swing GUI的EDT線程上運行,就像在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();
參考:
這是一個簡單的益智游戲的Swing
示例。
當您按下“ Pause
按鈕時,標題將變為動畫,直到您釋放暫停。 同樣,您可以將其用於JLabel
。 還附帶了源代碼。
希望對您有所幫助。
如果將構造函數的該部分放在線程中,則可以調用thread.sleep(1000);
(1000毫秒(1秒鍾的延遲)),然后刷新,這將使目標在屏幕上移動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.