2008-11-09 74 views
21

Tengo una ventana (derivada de JFrame) y deseo desactivar el botón de cerrar durante ciertas operaciones que no son interrumpibles. Sé que puedo hacer que el botón no hace nada (o llamar a un controlador en un WindowListener) llamandoCómo deshabilitar (u ocultar) el botón de cerrar (x) en un JFrame?

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

pero me gustaría dejar claro visualmente que no tiene sentido hacer clic en él.

+0

Sólo una sugerencia, es posible que desee considerar evitar tal comportamiento interfaz gráfica de usuario debido a la mala usabilidad. – Josh

+0

Estoy de acuerdo con Josh. Por lo menos, haga un mapa cerca de una ventana emergente que diga "Operación en curso ..." con un botón "Cancelar" (oculta la ventana emergente) y "Cerrar de todos modos" (se cierra). Cuando finaliza la operación de fondo, la aplicación se cierra si esa ventana emergente aún está visible (es decir, no han hecho clic en Cancelar) – SCdF

+0

posible duplicado de [¿Cómo ocultar los botones minimizar/maximizar y cerrar por defecto en la ventana de JFrame en Java?] (Http://stackoverflow.com/questions/9101418/how-to-hide-the-default-minimize-maximize-and-close-buttons-on-jframe-window-in) – Nathan

Respuesta

18

Esta es probablemente la mejor que se van a poner:

setUndecorated(true); 
getRootPane().setWindowDecorationStyle(JRootPane.NONE); 

Esto eliminará toda la barra de título, java en realidad no especifica una manera de eliminar los componentes individuales de la barra de título

de edición:

puede haber una manera, echa un vistazo a estos hilos:

5

Para los que vienen a esta tarde de 2008, se ha producido un cambio por lo que es posible hacer esto. Consulte this link

La segunda respuesta de la parte inferior muestra cómo hacerlo por su nombre.

+1

Al igual que muchas otras cosas en Swing, este también es un completo AGAVE. –

+0

* Segunda respuesta desde abajo *, ¿cuál es ahora, 5 años después? ¿Puede vincularse a él (enlace de "compartir" en la parte inferior) o citar el principio central? Además, ¿podría detallar un poco más el "cambio" al que se refiere? – Matthieu

0

Por favor, intente esto

frame.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
     e.getWindow().setVisible(false); 
      try { 
       wait(); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(WindowsActions.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    }); 
0

Esto le ayudará a:

frame.setDefaultCloseOperation(0); 
+1

¿Por qué diablos fue esto downvoted sin ningún comentario? Bloquea la operación de cierre según lo solicitado. Aunque mejor expresado como 'setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE)' –

+2

tuve que usar esas tres líneas para evitar que java se apague cuando tengo varios PApplet (Processing) lanzados: 'this.jframe.setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE; this.jframe .setUndecorated (true); this.jframe.getRootPane(). setWindowDecorationStyle (JRootPane.NONE); ' – ezawadzki

+0

Como dijo Tomas Zato, me ayudó;) – Furkan

Cuestiones relacionadas