问题如下:
点击一个按钮,弹出一个对话框,对话框里面包含确定和取消按钮,若点击确定,返回值为0,点击取消,返回值为1,若超过10秒不点击,提示窗口自动关闭,返回值为-5,后续可以根据返回值来做各种不同的判断。
1.TimerTest 主程序,先运行main方法,然后点击按钮。TimerTest.java
package com.chat.client; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import com.chat.ui.TimeDialog; public class TimerTest extends JFrame { private static final long serialVersionUID = 1L; private static JButton button; private static TimerTest TimerTest; public static void main(String[] args) { TimerTest = new TimerTest(); button = new JButton("按我"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { TimeDialog d = new TimeDialog(); int result = d.showDialog(TimerTest, "对方想要和你语音是否接受?", 10);// TimerTest是程序主窗口类,弹出的对话框10秒后消失 System.out.println("===result: "+result); } }); button.setBounds(2, 5, 80,20); TimerTest.getContentPane().setLayout(null); TimerTest.getContentPane().add(button); TimerTest.setSize(new Dimension(400,200)); TimerTest.setLocation(500,200); TimerTest.setVisible(true); TimerTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
2.自定义的Dialog。TimeDialog.java
package com.chat.ui; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; public class TimeDialog { private String message = null; private int secends = 0; private JLabel label = new JLabel(); private JButton confirm,cancel; private JDialog dialog = null; int result = -5; public int showDialog(JFrame father, String message, int sec) { this.message = message; secends = sec; label.setText(message); label.setBounds(80,6,200,20); ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor(); confirm = new JButton("接受"); confirm.setBounds(100,40,60,20); confirm.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { result = 0; TimeDialog.this.dialog.dispose(); } }); cancel = new JButton("拒绝"); cancel.setBounds(190,40,60,20); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { result = 1; TimeDialog.this.dialog.dispose(); } }); dialog = new JDialog(father, true); dialog.setTitle("提示: 本窗口将在"+secends+"秒后自动关闭"); dialog.setLayout(null); dialog.add(label); dialog.add(confirm); dialog.add(cancel); 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 { dialog.setTitle("提示: 本窗口将在"+secends+"秒后自动关闭"); } } }, 1, 1, TimeUnit.SECONDS); dialog.pack(); dialog.setSize(new Dimension(350,100)); dialog.setLocationRelativeTo(father); dialog.setVisible(true); return result; } }