【发布时间】:2013-12-08 10:09:15
【问题描述】:
我制作了这个示例来对 java 对话消息倒计时 30 秒。不知何故,消息组件没有刷新,直到现在我才明白为什么。如果时间正在更新并且组件重新绘制它应该可以工作。我尝试重新绘制 message.repaint() 和 messageFrame.repaint() 两个组件,但都没有工作。
下面的代码可以运行了。
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Chronometer {
private static final Insets INSETS = new Insets(1, 1, 1, 1);
public Chronometer(){
double timeToNext = System.currentTimeMillis() + 30000;
double timeDifference = 30000;
JFrame messageFrame = new JFrame();
messageFrame.setLayout(new GridBagLayout());
messageFrame.setTitle("Warning");
JLabel message = new JLabel("Preventing connection block. Next query in " + timeDifference/1000 + " seconds.");
messageFrame.setSize(1000,1000);
messageFrame.setLocationRelativeTo(null);
addComponent(messageFrame, message, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.CENTER);
messageFrame.setVisible(true);
while(timeDifference > 0){
timeDifference = timeToNext - System.currentTimeMillis();
messageFrame.repaint();
//message.repaint();
}
}
private static void addComponent(Container container, Component component, int gridx, int gridy,
int gridwidth, int gridheight, int anchor, int fill) {
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0,
anchor, fill, INSETS, 0, 0);
container.add(component, gbc);
}
public static void main(String[] args){
Chronometer c = new Chronometer();
}
}
【问题讨论】:
标签: java swing refresh components repaint