java中打印可以设置不出谈框吗,如何使用Java创建“不再询问我"对话框弹出框?...

In one part of my program I use a JOptionPane to ask the user if they are sure of what he will do. But I do not want to bore the user asking that every time you try so I like to use the function of some dialog boxes in android that come with the "Do not ask again", but do not know how to implement that in my program, someone here you could help me?

(Should have a Spanish StackOverflow)

This is my code

if (jCheckBox2.isSelected() && jCheckBox1.isSelected()){

JOptionPane.showConfirmDialog(null, "This action can cause problems, want to do it?");

//here must be something to never ask again this

}

解决方案

The basic idea is to take advantage of the fact the message parameter can actually be a Component. The problem then comes down to checking to see if the user selected the "Don't ask me again" option, storing and re-using it

Something like...

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.FlowLayout;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Reader;

import java.io.Writer;

import java.util.Properties;

import javax.swing.JCheckBox;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class DontAskMeAgainPanel extends JPanel {

private JCheckBox dontAskMeAgain;

public DontAskMeAgainPanel(Object message) {

setLayout(new BorderLayout());

if (message instanceof Component) {

add((Component) message);

} else if (message != null) {

add(new JLabel(message.toString()));

}

dontAskMeAgain = new JCheckBox("Don't ask me again");

JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));

panel.add(dontAskMeAgain);

add(panel, BorderLayout.SOUTH);

}

public boolean dontAskMeAgain() {

return dontAskMeAgain.isSelected();

}

private static Properties settings;

protected static void loadProperties() {

if (settings != null) {

settings = new Properties();

File source = new File("...");

if (source.exists()) {

try (Reader r = new FileReader(source)) {

settings.load(r);

} catch (IOException exp) {

exp.printStackTrace();

}

}

}

}

protected static void saveProperties() {

if (settings != null) {

settings = new Properties();

File source = new File("...");

try (Writer w = new FileWriter(source)) {

settings.store(w, "Don't prompt for settings");

} catch (IOException exp) {

exp.printStackTrace();

}

}

}

public static int showConfirmDialog(Component parent, Object message, String key) {

loadProperties();

int result = JOptionPane.NO_OPTION;

if (settings.containsKey(key + ".prompt") && !Boolean.parseBoolean(settings.getProperty(key + ".value"))) {

result = Integer.parseInt(settings.getProperty(key + ".value"));

} else {

DontAskMeAgainPanel panel = new DontAskMeAgainPanel(message);

result = JOptionPane.showConfirmDialog(parent, panel);

if (panel.dontAskMeAgain()) {

settings.put(key + ".prompt", "false");

settings.put(key + ".value", Integer.toString(result));

saveProperties();

}

}

return result;

}

}

As a basic starting point. I've used Properties as the backing store for simplicity, you could use a database or other persistent method (Preferences, XML, etc)

Then you could just use it something like...

int result = DontAskMeAgainPanel.showConfirmDialog(null, "This is annoying", "Annoying");

System.out.println("You selected " + result);

result = DontAskMeAgainPanel.showConfirmDialog(null, "This is annoying", "Annoying");

System.out.println("Then you selected " + result);

If you select "Don't ask me again" at the first prompt, then the second call will return the previously selected value

Now, somewhere, you're probably going to want to have the ability to reverse these decisions ;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值