gpt4 book ai didi

java - 在java中如何显示特定时间的输入对话框消息?

转载 作者:行者123 更新时间:2023-12-02 13:41:17 25 4
gpt4 key购买 nike

在我的程序中,我想显示一个输入对话框以获取用户的输入。但如果用户没有在特定时间内给出反馈,输入对话框将关闭并运行默认设置。

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


public class WorkerDemo {





public static void main(String[] args) {

JDialog.setDefaultLookAndFeelDecorated(true);
final JOptionPane Message = new JOptionPane("do u want to stop posting?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);


final JDialog getInput = Message.createDialog("Select Yes or No");
final int Option = Message.PROPERTIES;
getInput.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);

Message.addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(ComponentEvent e) {
//super.componentShown(e);
final Timer t = new Timer(5000,new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Message.setVisible(false);
}
});
t.start();
t.setRepeats(false);

}
});

Message.setVisible(true);

if (Option == JOptionPane.NO_OPTION) {
System.out.println("No button clicked");
} else if (Option == JOptionPane.YES_OPTION) {
System.out.println("Yes button clicked");
} else if (Option == JOptionPane.CLOSED_OPTION) {
System.out.println("JOptionPane closed");}

System.out.println("Outside code.");


}
}

这里的问题是条件是否不起作用。有什么办法可以解决这个问题吗?提前致谢。

最佳答案

这是您的代码的工作版本:

import javax.swing.*;

public class WorkerDemo {

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JDialog.setDefaultLookAndFeelDecorated(true);
JOptionPane optionPane = new JOptionPane("do u want to stop posting?",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);


JDialog dialog = optionPane.createDialog("Select Yes or No");
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);

Timer timer = new Timer(5000, e -> dialog.setVisible(false));
timer.setRepeats(false);
timer.start();

dialog.setVisible(true);

if (optionPane.getValue() instanceof Integer) {
int option = (Integer) optionPane.getValue();

if (option == JOptionPane.NO_OPTION) {
System.out.println("No button clicked");
}
else if (option == JOptionPane.YES_OPTION) {
System.out.println("Yes button clicked");
}
}
else {
System.out.println("dialog was closed by timer");
}

System.out.println("Outside code.");
});
}
}

解释和注释:

  • 我为变量选择了更好的名称,并遵守 Java 命名约定
  • 我使对话框可见/不可见,而不是选项 Pane
  • 我用 lambda 表达式替换了内部类,以使代码更短、更具可读性
  • 该选项是从 optionPane 的 getValue() 方法获取的,该方法返回用户选择的内容。您使用常量 Message.PROPERTIES 初始化它的方式没有任何意义。
  • 得益于 SwingUtilities.invoeLater(),一切都在事件分派(dispatch)线程中按其应有的方式执行。
  • 计时器只是在对话框可见之前启动。不需要组件监听器来执行此操作。
  • 无需处理 CLOSED_OPTION,因为您明确告诉选项 Pane 在关闭时不执行任何操作:此选项是不可能的。

关于java - 在java中如何显示特定时间的输入对话框消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com