我看了很多地方,無法找到如何自動刷新我的框架。它確實工作(因爲我已經使用了很多例子),當我點擊按鈕,但不是自動的。平滑組件在修改或循環後自動刷新(例如:定時器)
我想創建一個MineSweeper遊戲,並且我在其中添加Timer,除了定時器計數外,其他所有工作都可以使用,但只有在單擊按鈕時纔會更新。因此,簡單地重做佈局將無法正常工作...
堅韌我知道我的計時器工作,如果我把一個System.out中,我看到它在穩定的二次率。
我會在下面寫一個小程序,而不是我的遊戲,因爲代碼太長了,但是我建了一個小小的程序,解決了它的問題。
在這種情況下,我沒有從我的其他程序開發良好的按鈕,但時間只會刷新,當我搞亂了窗口。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class ClockTest {
JFrame frame = new JFrame();
JButton test1 = new JButton();
JTextField timer1 = new JTextField();
int hour = 0, min = 0, sec = 0;
String timing;
public ClockTest() {
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(center(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public Component center() {
JPanel pan = new JPanel();
pan.setLayout(new GridLayout(1,2));
test1.setText("Dummy");
timer1.setEditable(false);
timer1.setText(timing);
pan.add(test1);
pan.add(timer1);
return pan;
}
public void count() {
sec++;
if(sec == 60) {
sec -= 60;
min++;
}
if(min == 60) {
min -= 60;
hour++;
}
timing = hour + ":" + min + " : " + sec;
//This is what i do in my game to refresh, to set flags, get mine "exploded"...
//But since i'm not pressing anything... it does not happen.
frame.add(center(), BorderLayout.CENTER);
}
public static void main(String[]args) {
final ClockTest test1 = new ClockTest();
TimerTask task = new TimerTask() {
public void run() {
test1.count();
}
};
Timer t = new Timer();
t.schedule(task,0,1000);
}
}
http://docs.oracle.com/javase/6/docs/api/javax/swing/JPanel.html#JPanel() – 2013-04-05 18:22:42