2010-06-12 256 views
12

Ejemplo ahora tengo un marco principal que contiene jtable muestra toda la información del cliente, y había un botón Crear para abrir un nuevo JFrame que permite al usuario crear un nuevo cliente. No quiero que el usuario pueda abrir más de un marco de creación. ¿Cualquier componente de swing o API puede hacer eso? o ¿cómo se puede desactivar el marco principal? Algo así como JDialog.Cómo deshabilitar JFrame principal cuando abre nuevo JFrame

Respuesta

11

Yo sugeriría que haga que su nuevo diálogo de cliente sea modal JDialog para que no permita la entrada de otros cuadros de diálogo/marcos en su aplicación mientras esté visible. Eche un vistazo a modality tutorial para más detalles.

+0

Hola, hace exactamente lo que quiero. Muchas gracias – user236501

+0

Por otro lado, las interfaces de usuario modal son * muy * molestas, así que considere rediseñar la GUI para permitir la edición de varios usuarios diferentes al mismo tiempo. – KarlP

1

simplemente use firstFrame.setVisible(false) en el primer cuadro. Esto hará que sea oculto ..

si quieres un enfoque más general que podría tener una referencia al marco actual que se muestra en alguna parte y cambiarlo cuando un nuevo marco de las solicitudes que se muestran

JFrame currentFrame; 

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

Quiero que el marco principal siga allí, solo quiero asegurarme de que el usuario solo abra un marco de creación. Estaba pensando en deshabilitar para el botón, pero ¿hay alguna otra buena práctica para implementar? – user236501

+1

puede probar con __. SetFocusable (falso) __, esto mantendrá el marco, pero el usuario no podrá hacer clic en nada dentro de él .. – Jack

+0

Gracias por su sugerencia. Traté de hacerlo como createButton.addActionListener (nueva 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 (falso); } }); ¿Pero aún puedo hacer clic en el botón Crear en el marco principal? – user236501

17

Creo que se debe usar este código para el JFrame principal cuando se intenta abrir uno nuevo:

this.setEnabled(false);

+2

tan simple y realmente responde la pregunta OP, me has ayudado. –

+0

Perfecto, debería haber sido la respuesta aceptada a "cómo deshabilitar el marco principal". ¡Gracias! – corporateWhore

2

Lo siento por la tarde respuesta, pero ¿ha considerado el patrón de diseño Singleton? Devolverá la misma instancia de una clase cuando quiera la clase. Por lo que si el usuario desea un marco para entrar en los detalles, sólo habrá un cuadro abierto (misma instancia)

Es algo parecido a esto:

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

que puede utilizar:

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

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

}