天天看点

java对话框关闭_java 自定义确认取消的Dialog对话框,10秒之后自动关闭

问题如下:

点击一个按钮,弹出一个对话框,对话框里面包含确定和取消按钮,若点击确定,返回值为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;

}

}