2010-06-12 12 views
12

Esempio ora ho un frame principale contiene jtable display tutte le informazioni sul cliente, e c'era un pulsante di creazione per aprire un nuovo JFrame che consente all'utente di creare nuovi clienti. Non voglio che l'utente possa aprire più di una cornice. Qualunque componente swing o API può farlo? o come può disabilitare il frame principale? Qualcosa come JDialog.Come disabilitare JFrame principale quando si apre JFrame nuovo

risposta

11

Vorrei suggerire per rendere la finestra di dialogo del nuovo cliente un modale JDialog in modo da non consentire l'input da altre finestre di dialogo/frame nell'app mentre è visibile. Dai uno sguardo allo modality tutorial per i dettagli.

+0

Ciao, fa esattamente quello che voglio. Grazie mille – user236501

+0

D'altra parte, le interfacce utente modali sono * molto * fastidiose, quindi si consideri di riprogettare la GUI per consentire la modifica di diversi utenti allo stesso tempo. – KarlP

1

utilizzare solo firstFrame.setVisible(false) sul primo frame. In questo modo sarà nascosto ..

se si desidera un approccio più generale si potrebbe avere un riferimento al fotogramma visualizzato in corso da qualche parte e cambiarlo quando un nuovo telaio richieste da mostrare

JFrame currentFrame; 

void showRequest(JFrame frame) 
{ 
    currentFrame.setVisible(false); 
    currentFrame = frame; 
    currentFrame.setVisible(true); 
} 
+0

Voglio che il frame principale sia ancora lì, voglio solo assicurarmi che l'utente apra solo un frame creato. Stavo pensando di disabilitare a pulsante, ma c'è qualche altra buona pratica da implementare? – user236501

+1

puoi provare con __. SetFocusable (false) __, questo manterrà il frame ma all'utente non sarà permesso fare clic su qualsiasi cosa al suo interno .. – Jack

+0

Grazie per il tuo suggerimento. Ho provato a farlo come createButton.addActionListener (nuova java.awt.event.ActionListener() { \t public void actionPerformed (java.awt.event.ActionEvent e) {\t \t \t \t \t ... \t createFrame.setVisible (true); \t mainframe.setFocusable (false); } }); Ma posso ancora fare clic sul pulsante di creazione sul frame principale? – user236501

17

Credo che si dovrebbe utilizzare questo codice per il JFrame principale quando si tenta di aprire uno nuovo:

this.setEnabled(false);

+2

così semplice e in effetti rispondi alla domanda OP, mi hai aiutato. –

+0

Perfetto, avrebbe dovuto essere la risposta accettata a "come disabilitare il frame principale". Grazie! – corporateWhore

2

Ci scusiamo per il ritardo risposta, ma hai considerato il design pattern Singleton? Restituirà la stessa istanza di una classe ogni volta che vuoi la classe. Quindi, se l'utente vuole una cornice di entrare nei dettagli, ci sarà un telaio aperto solo (stessa istanza)

va qualcosa di simile:

private static MySingleFrame instance = null; //global var 

private MySingleFrame() { } //private constructor 
private static MySingleFrame getInstance() 
{ 

if(instance == null) 
{ 
instance = new MySingleFrame(); 
} 

//returns the same instance everytime MySingleFrame.getInstance() is called 
return instance; 


} 
1

È possibile utilizzare:

private void btn_NewFormActionPerformed(java.awt.event.ActionEvent evt) { 

      this.hide(); 
      new Frm_NewFormUI().setVisible(true); 

}