Domanda

Vorrei disabilitare la chiusura x nell'angolo in alto a sinistra del mio JOptionPane come farei questo?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top