Disattivando i chiudi x in un JOptionPane
-
21-09-2019 - |
Domanda
Vorrei disabilitare la chiusura x nell'angolo in alto a sinistra del mio JOptionPane come farei questo?
Soluzione
Si può sempre e solo mostrare nuovamente la finestra quando l'utente tenta di chiuderlo senza selezionare un'opzione. C'è un esempio di come ignorare il comportamento predefinito di chiusura a . it . Guardate sotto "Arresto di dialogo Chiusura Automatica" e hanno il seguente codice:
final JOptionPane optionPane = new JOptionPane(
"The only way to close this dialog is by\n"
+ "pressing one of the following buttons.\n"
+ "Do you understand?",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);
final JDialog dialog = new JDialog(frame,
"Click a button",
true);
dialog.setContentPane(optionPane);
dialog.setDefaultCloseOperation(
JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
setLabel("Thwarted user attempt to close window.");
}
});
optionPane.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if (dialog.isVisible()
&& (e.getSource() == optionPane)
&& (prop.equals(JOptionPane.VALUE_PROPERTY))) {
//If you were going to check something
//before closing the window, you'd do
//it here.
dialog.setVisible(false);
}
}
});
dialog.pack();
dialog.setVisible(true);
int value = ((Integer)optionPane.getValue()).intValue();
if (value == JOptionPane.YES_OPTION) {
setLabel("Good.");
} else if (value == JOptionPane.NO_OPTION) {
setLabel("Try using the window decorations "
+ "to close the non-auto-closing dialog. "
+ "You can't!");
}
Utilizzando questo codice, si potrebbe facilmente adattare la sezione commentata per consentire solo la finestra da chiudere quando l'utente ha fatto clic una delle opzioni disponibili e non il pulsante di chiusura.
Altri suggerimenti
Michael,
Non so come disattivare il Chiudi [x] pulsante. In alternativa, si può fare nulla quando l'utente fa clic su di esso. Controllare il codice qui sotto:
JOptionPane pane = new JOptionPane("message");
JDialog dialog = pane.createDialog(null, "Title");
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
dialog.setVisible(true);
E 'ragionevole per voi?
è possibile sovrascrivere il pulsante di uscita da un pulsante di annullamento dichiarata in JOptionPane e gestire l'operazione di cancellazione di conseguenza:
JOptionPane optionPane= new JOptionPane("message", JOptionPane.OK_CANCEL_OPTION);
final JDialog dialog = optionPane.createDialog(null, "Input");
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) {
optionPane.setValue(JOptionPane.CANCEL_OPTION);
}
});
if (JOptionPane.CANCEL_OPTION!= ((Integer) optionPane.getValue()).intValue())
throw new myCancellationException();
Non sono sicuro se c'è un modo per fare questo in JOptionPane
.
Di solito quando le persone vogliono una maggiore flessibilità rispetto JOptionPane offerte (è fondamentalmente un gruppo di fabbriche statiche per un paio di finestre di dialogo), scrivono i loro dialoghi utilizzando JDialog
.
JDialog offre il metodo setUndecorated
ereditato, che elimina il X del tutto. E 'più di lavoro, ma si può rendere il vostro sguardo dialogo tuttavia si desidera.