2011-09-05 14 views
5

¿Qué código facilitará la inmovilización de un JDialog? He observado dos opciones:Java - JDialog inamovible

  1. setUndecorated(true); que funciona pero elimina todos los recortes.
  2. addComponentListener y anulando el método componentMoved(), lo que hace que JDialog llame posteriormente al induceEpilepticSeizure() al moverse.

¿Alguna idea?

+2

¿Puedes explicar por qué quieres hacer esto? Podría dar una idea para un enfoque que funcione. –

Respuesta

5

Mi primer instinto es: no puedes hacerlo a menos que uses setUndecorated (verdadero) ... Podrías poner adornos manualmente allí, pero, bueno, ¡UGH!

Así que si quieres los adornos nativos Y lo quieres inamovible sin el horrible parpadeo del uso de un componente oyente, creo que no puedes.

Podría crear un borde manualmente que MIREA como el borde predeterminado ... aquí hay un ejemplo de cómo hacerlo, aunque intencionalmente he hecho que el borde parezca lo más feo que ha visto en todo el día. Deberá encontrar la combinación correcta de llamadas BorderFactory para lograr lo que desea hacer.

public static void main(String[] args) throws InterruptedException { 
    JDialog frame = new JDialog((Frame) null, "MC Immovable"); 
    frame.setUndecorated(true); 
    JPanel panel = new JPanel(); 
    panel.setBorder(BorderFactory.createEtchedBorder(Color.GREEN, Color.RED)); 
    panel.add(new JLabel("You can't move this")); 

    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    frame.setVisible(true); 
} 
+1

Mi razón para no usar setUndecorated (verdadero) es que quiero mantener el borde predeterminado. ¿Es una ventana sin bordes? Gracias amigo. –

Cuestiones relacionadas