
Originariamente inviata da
roquentin
Non mi piace molto l'idea della visualizzazione del JCheckBox ogni volta che viene visualizzato il messaggio (se ho capito bene)
Non so bene cosa hai capito .... comunque prova l'esempio qui sotto. 

Originariamente inviata da
roquentin
Purtroppo non riesco ancora ad entrare nella logica del linguaggio ad oggetti...
Le duplicazioni che hai fatto a dire il vero non sono colpa della programmazione ad oggetti .... ma c'entrano con la programmazione in generale. Poi, certamente, se non hai ancora una idea chiara della programmazione ad oggetti, questa sì è una fatica (e problema) in più, che devi risolvere con il tempo ma possibilmente il prima possibile. 
codice:
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
public class MessageBox {
private String title;
private Icon icon;
private String dontShowAgainCheckboxText;
private boolean showable = true;
public MessageBox() {}
public MessageBox(String title) {
this.title = title;
}
public MessageBox(String title, Icon icon) {
this.title = title;
this.icon = icon;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Icon getIcon() {
return icon;
}
public void setIcon(Icon icon) {
this.icon = icon;
}
public String getDontShowAgainCheckboxText() {
return dontShowAgainCheckboxText;
}
public void setDontShowAgainCheckboxText(String dontShowAgainCheckboxText) {
this.dontShowAgainCheckboxText = dontShowAgainCheckboxText;
}
public void showWarning(Component parentComponent, String messageText) {
internalMessageDialog(parentComponent, messageText, JOptionPane.WARNING_MESSAGE);
}
private void internalMessageDialog(Component parentComponent, String messageText, int messageType) {
if (showable) {
Object message;
JCheckBox dontShowAgainCheckbox = null;
if (dontShowAgainCheckboxText != null) {
dontShowAgainCheckbox = new JCheckBox(dontShowAgainCheckboxText);
message = new Object[] { messageText, dontShowAgainCheckbox };
} else {
message = messageText;
}
JOptionPane.showMessageDialog(parentComponent, message, title, messageType, icon);
if (dontShowAgainCheckbox != null && dontShowAgainCheckbox.isSelected()) {
showable = false;
}
}
}
}
Un main di prova:
codice:
public class ProvaMessageBox {
public static void main(String[] args) {
MessageBox messageBox = new MessageBox("AVVISO");
messageBox.setDontShowAgainCheckboxText("Non visualizzare più fino al termine del ciclo");
for (int i = 1; i <= 10; i++) {
System.out.println("Processamento " + i);
messageBox.showWarning(null, "Avviso n." + i);
}
}
}
La classe MessageBox è abbastanza semplice ma è già funzionante. Si potrebbe infarcirla ed espanderla ancora di più e come si vuole. Si potrebbero aggiungere dei metodi showError, showInformation, ecc...
Tutto questo ha principalmente un solo obiettivo: rendere più semplice e pratica la gestione delle message box. È vero che la classe MessageBox ha già 70 righe e se la espandi crescerebbe ancora di più, ma poi è tutto lì, ben racchiuso. E il resto della tua applicazione ne beneficia perché offri una gestione più compatta e semplice delle message box.
Non è solo questione di scrivere meno codice (ogni volta non devi ricordarti tutti i parametri e le varianti di JOptionPane.showMessageDialog, non devi ripetere JOptionPane.WARNING_MESSAGE ecc...) ma anche di aver incapsulato della logica in un solo punto e oltretutto ben riutilizzabile.
La logica del "don't show again" (il non mostrare più successivamente) è tutta dentro MessageBox ed è ben nascosta.