如何用java创建一个“不要再问我”对话框弹出框?

前端之家收集整理的这篇文章主要介绍了如何用java创建一个“不要再问我”对话框弹出框?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的程序的一部分中,我使用JOptionPane来询问用户他们是否确定他将做什么.但是我不想让用户每次尝试都要求这样我喜欢使用 android中的一些对话框的功能,这些对话框带有“不要再问”,但不知道如何在我的程序中实现它,有人在这里你可以帮助我吗?
(应该有一个西班牙语StackOverflow)
这是我的代码
  1. if (jCheckBox2.isSelected() && jCheckBox1.isSelected()){
  2. JOptionPane.showConfirmDialog(null,"This action can cause problems,want to do it?");
  3. //here must be something to never ask again this
  4.  
  5. }

解决方法

基本思想是利用message参数实际上可以是Component的事实.然后问题归结为检查用户是否选择了“不要再问我”选项,存储并重新使用它

就像是…

  1. import java.awt.BorderLayout;
  2. import java.awt.Component;
  3. import java.awt.FlowLayout;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.Reader;
  9. import java.io.Writer;
  10. import java.util.Properties;
  11. import javax.swing.JCheckBox;
  12. import javax.swing.JLabel;
  13. import javax.swing.JOptionPane;
  14. import javax.swing.JPanel;
  15.  
  16. public class DontAskMeAgainPanel extends JPanel {
  17.  
  18. private JCheckBox dontAskMeAgain;
  19.  
  20. public DontAskMeAgainPanel(Object message) {
  21. setLayout(new BorderLayout());
  22. if (message instanceof Component) {
  23. add((Component) message);
  24. } else if (message != null) {
  25. add(new JLabel(message.toString()));
  26. }
  27. dontAskMeAgain = new JCheckBox("Don't ask me again");
  28. JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
  29. panel.add(dontAskMeAgain);
  30. add(panel,BorderLayout.SOUTH);
  31. }
  32.  
  33. public boolean dontAskMeAgain() {
  34. return dontAskMeAgain.isSelected();
  35. }
  36.  
  37. private static Properties settings;
  38.  
  39. protected static void loadProperties() {
  40. if (settings != null) {
  41. settings = new Properties();
  42. File source = new File("...");
  43. if (source.exists()) {
  44. try (Reader r = new FileReader(source)) {
  45. settings.load(r);
  46. } catch (IOException exp) {
  47. exp.printStackTrace();
  48. }
  49. }
  50. }
  51. }
  52.  
  53. protected static void saveProperties() {
  54. if (settings != null) {
  55. settings = new Properties();
  56. File source = new File("...");
  57. try (Writer w = new FileWriter(source)) {
  58. settings.store(w,"Don't prompt for settings");
  59. } catch (IOException exp) {
  60. exp.printStackTrace();
  61. }
  62. }
  63. }
  64.  
  65. public static int showConfirmDialog(Component parent,Object message,String key) {
  66.  
  67. loadProperties();
  68.  
  69. int result = JOptionPane.NO_OPTION;
  70.  
  71. if (settings.containsKey(key + ".prompt") && !Boolean.parseBoolean(settings.getProperty(key + ".value"))) {
  72. result = Integer.parseInt(settings.getProperty(key + ".value"));
  73. } else {
  74. DontAskMeAgainPanel panel = new DontAskMeAgainPanel(message);
  75. result = JOptionPane.showConfirmDialog(parent,panel);
  76. if (panel.dontAskMeAgain()) {
  77. settings.put(key + ".prompt","false");
  78. settings.put(key + ".value",Integer.toString(result));
  79.  
  80. saveProperties();
  81. }
  82. }
  83. return result;
  84. }
  85.  
  86. }

作为一个基本出发点.为简单起见,我使用了Properties作为后备存储,你可以使用数据库或其他持久化方法(Preferences,XML等)

然后你就可以使用它……

  1. int result = DontAskMeAgainPanel.showConfirmDialog(null,"This is annoying","Annoying");
  2. System.out.println("You selected " + result);
  3. result = DontAskMeAgainPanel.showConfirmDialog(null,"Annoying");
  4. System.out.println("Then you selected " + result);

如果在第一个提示中选择“不要再问我”,则第二个调用将返回先前选择的值

现在,在某个地方,你可能希望有能力扭转这些决定;)

猜你在找的Java相关文章