10

こんにちは、Java SwingJDialogボックス (または別の Swing オブジェクト タイプ) を作成して、特定のイベントをユーザーに警告し、遅延後に自動的にダイアログを閉じることができます。ユーザーがダイアログを閉じる必要はありませんか?

4

3 に答える 3

14

このソリューションは oxbow_lakes に基づいていますが、このタイプのものを対象とした javax.swing.Timer を使用しています。常にイベント ディスパッチ スレッドでコードを実行します。これは、微妙だが厄介なバグを回避するために重要です

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        final JDialog dialog = new JDialog(f, "Test", true);
        Timer timer = new Timer(2000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dialog.setVisible(false);
                dialog.dispose();
            }
        });
        timer.setRepeats(false);
        timer.start();

        dialog.setVisible(true); // if modal, application will pause here

        System.out.println("Dialog closed");
    }
}
于 2009-08-20T16:01:31.100 に答える
7

はい - もちろんできます。締め切りをスケジュールしようとしましたか?

JFrame f = new JFrame();
final JDialog dialog = new JDialog(f, "Test", true);

//Must schedule the close before the dialog becomes visible
ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor();     
s.schedule(new Runnable() {
    public void run() {
        dialog.setVisible(false); //should be invoked on the EDT
        dialog.dispose();
    }
}, 20, TimeUnit.SECONDS);

 dialog.setVisible(true); // if modal, application will pause here

 System.out.println("Dialog closed");

上記のプログラムは 20 秒後にダイアログを閉じ、 「ダイアログが閉じられました」というテキストがコンソールに出力されます。

于 2009-08-20T15:18:51.290 に答える
3

私はスイングタイマーを使用します。タイマーが起動すると、イベント ディスパッチ スレッドでコードが自動的に実行され、GUI に対するすべての更新は EDT で行われる必要があります。

How to Use Timersに関する Swing チュートリアルのセクションを読んでください。

于 2009-08-20T15:27:08.983 に答える