用JOptionPane生成一个对话框, 生成之后,要点击确定按钮才会关闭此信息提示对话框,我想在想让它在5秒之后自动关闭该怎么写下面的代码呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 final JOptionPane options = ...;final JDialog dialog = options.createDialog(...);final javax.swing.Timer timer = new javax.swing.Timer(5000, // 5s delay new ActionListener(){ public void actionPerformed(ActionEvent e){ dialog.dispose(); } });dialog.addComponentListener(new ComponentAdapter(){ public void componentShown(ComponentEvent e){ timer.start(); } }); 这里我看的还不是很清楚,我现在做的是一个按钮的事件,当我按下按钮时,弹出一个信息对话框,按钮的事件我以加载好,就是下面这段代码。JOptionPane.showMessageDialog(null, "输入 的数字不合法请输入"+p+"~"+q);让这个对话框,定时5秒自动关闭Timer这个计时器为什么要加载那么多事件呢还有那么多内部类,我现在还看不明白。 这个很新鲜,还真没往这方面想过在其他线程中对swing组件进行操作,是否有多线程风险?此处是否有必要用 SwingWorker ?请指教 //定义一个倒计时自动消失的窗口类public class TimeDialog { private String message = null; private int secends = 0; private JLabel label = new JLabel(); private JDialog dialog = null; public void showDialog(JFrame father, String message, int sec) { this.message = message; secends = sec; label.setText(message+" 本窗口 "+secends+" 秒后关闭自动"); ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor(); dialog = new JDialog(father, "提示信息", true); dialog.add(label); s.scheduleAtFixedRate(new Runnable() { @Override public void run() { // TODO Auto-generated method stub TimeDialog.this.secends--; if(TimeDialog.this.secends == 0) { TimeDialog.this.dialog.dispose(); }else { label.setText(TimeDialog.this.message+" 本窗口 "+secends+" 秒后关闭自动"); } } }, 1, 1, TimeUnit.SECONDS); dialog.pack(); dialog.setLocationRelativeTo(father); dialog.setVisible(true); } }//在你的程序中,用下面的语句弹出一个倒计时窗口 TimeDialog d = new TimeDialog(); d.showDialog(MyFrame.this, "你好", 5);// MyFrame是程序主窗口类,弹出的对话框5秒后消失 Thread.sleep(5000);然后dispose不就可以了吗,为什么搞那么复杂 //定义一个倒计时自动消失的窗口类public class TimeDialog { private String message = null; private int secends = 0; private JLabel label = new JLabel(); private JDialog dialog = null; private ScheduledExecutorService s; public void showDialog(JFrame father, String message, int sec) { this.message = message; secends = sec; label.setText(message+" 本窗口 "+secends+" 秒后关闭自动"); s = Executors.newSingleThreadScheduledExecutor(); dialog = new JDialog(father, "提示信息", true); dialog.add(label); s.scheduleAtFixedRate(new Runnable() { @Override public void run() { // TODO Auto-generated method stub TimeDialog.this.secends--; if(TimeDialog.this.secends == 0) { TimeDialog.this.dialog.dispose(); TimeDialog.this.s.shutdown(); }else { label.setText(TimeDialog.this.message+" 本窗口 "+secends+" 秒后关闭自动"); } } }, 1, 1, TimeUnit.SECONDS); dialog.pack(); dialog.setLocationRelativeTo(father); dialog.setVisible(true); } }//在你的程序中,用下面的语句弹出一个倒计时窗口 TimeDialog d = new TimeDialog(); d.showDialog(MyFrame.this, "你好", 5);// MyFrame是程序主窗口类,弹出的对话框5秒后消失稍微修改了下楼上的bug 加了一句TimeDialog.this.s.shutdown();不然窗口弹得越多,线程就越来越多 Java中NIO 的N是什么意思? 请教一个给xml文件进行加密的问题 服务器压力?? 怎么样很好理解ActionListener. 可视化编程根本就没这东西 数据库的连接字符串放在那里比较方便? 有关贴一个图片到JButton上的问题。 大家来帮忙啊,同一包中的类之间相互调用出现问题!!(在线等待) 急救:有关FileChooser类的一个问题!!!!!!!!!!!! 请各位老大指点一条明路!!! 请问如何用c语言调用Java的程序? 求助!java中自定义类数组的创建 老生常谈,JAVA传参数到底是值传递还是引用?
final JDialog dialog = options.createDialog(...);
final javax.swing.Timer timer = new javax.swing.Timer(5000, // 5s delay
new ActionListener(){
public void actionPerformed(ActionEvent e){
dialog.dispose();
}
});
dialog.addComponentListener(new ComponentAdapter(){
public void componentShown(ComponentEvent e){
timer.start();
}
});
JOptionPane.showMessageDialog(null, "输入 的数字不合法请输入"+p+"~"+q);
让这个对话框,定时5秒自动关闭
Timer这个计时器为什么要加载那么多事件呢还有那么多内部类,我现在还看不明白。
//定义一个倒计时自动消失的窗口类
public class TimeDialog { private String message = null;
private int secends = 0;
private JLabel label = new JLabel();
private JDialog dialog = null; public void showDialog(JFrame father, String message, int sec) {
this.message = message;
secends = sec;
label.setText(message+" 本窗口 "+secends+" 秒后关闭自动");
ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor();
dialog = new JDialog(father, "提示信息", true);
dialog.add(label);
s.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
TimeDialog.this.secends--;
if(TimeDialog.this.secends == 0) {
TimeDialog.this.dialog.dispose();
}else {
label.setText(TimeDialog.this.message+" 本窗口 "+secends+" 秒后关闭自动");
}
}
}, 1, 1, TimeUnit.SECONDS);
dialog.pack();
dialog.setLocationRelativeTo(father);
dialog.setVisible(true);
}
}
//在你的程序中,用下面的语句弹出一个倒计时窗口
TimeDialog d = new TimeDialog();
d.showDialog(MyFrame.this, "你好", 5);// MyFrame是程序主窗口类,弹出的对话框5秒后消失
然后dispose不就可以了吗,为什么搞那么复杂
//定义一个倒计时自动消失的窗口类
public class TimeDialog { private String message = null;
private int secends = 0;
private JLabel label = new JLabel();
private JDialog dialog = null;
private ScheduledExecutorService s; public void showDialog(JFrame father, String message, int sec) {
this.message = message;
secends = sec;
label.setText(message+" 本窗口 "+secends+" 秒后关闭自动");
s = Executors.newSingleThreadScheduledExecutor();
dialog = new JDialog(father, "提示信息", true);
dialog.add(label);
s.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
TimeDialog.this.secends--;
if(TimeDialog.this.secends == 0) {
TimeDialog.this.dialog.dispose();
TimeDialog.this.s.shutdown();
}else {
label.setText(TimeDialog.this.message+" 本窗口 "+secends+" 秒后关闭自动");
}
}
}, 1, 1, TimeUnit.SECONDS);
dialog.pack();
dialog.setLocationRelativeTo(father);
dialog.setVisible(true);
}
}
//在你的程序中,用下面的语句弹出一个倒计时窗口
TimeDialog d = new TimeDialog();
d.showDialog(MyFrame.this, "你好", 5);// MyFrame是程序主窗口类,弹出的对话框5秒后消失稍微修改了下楼上的bug
加了一句TimeDialog.this.s.shutdown();
不然窗口弹得越多,线程就越来越多