2009-11-04 17 views

Respuesta

27

bastante simple de Oh..it:

Digamos que tiene un JFrame que contiene un JDialog, y desea que el JDialog (cuando se abre) para ser justo encima de JFrame.

Así que en JDialog constructor, debe tener algo como:

public class MyDialog extends JDialog 
public MyDialog(JFrame parent) 
{ 
    super.setLocationRelativeTo(parent); // this will do the job 
} 

En otras palabras, pasar el puntero JFrame a su diálogo y llamar setLocationRelativeTo (...); método.

+0

No me di cuenta de que el método existía; bastante práctico! – rob

+6

Guau, ¡esto realmente me ayudó! Sin embargo, pequeños detalles ... solo se debe invocar DESPUÉS de configurar el tamaño del diálogo, o el cuadro de diálogo aparecerá con la esquina superior izquierda centrada en la ventana principal. – Nyerguds

3

¿De qué tipo de diálogo emergente está hablando? Si está utilizando JOptionPane o algo similar, establezca su componente principal en JFrame y se centrará automáticamente en la parte superior de la ventana de JFrame.

JOptionPane.showMessageDialog(frame, "Hello, World!"); 

Si va a crear su propio JDialog, puede obtener la posición del JFrame utilizando JFrame.getLocation() y su tamaño utilizando JFrame.getSize(). La matemática es bastante simple desde allí; simplemente calcule el centro del JFrame y restar la mitad del ancho/alto del JDialog para obtener la esquina superior izquierda del cuadro de diálogo.

Si su JDialog aún no se ha renderizado, JFrame.getSize() puede darle un tamaño cero. En ese caso, puede usar JDialog.getPreferredSize() para averiguar qué tan grande será una vez que se muestre en la pantalla.

4

generalmente que llamo el método siguiente:

dialog.setLocationRelativeTo(parent); 

Link to Javadocs

0

Si quieres un modal y centrado en una ventana de diálogo ...

en el constructor del diálogo:

class CustomDialog extends JDialog { 
    public CustomDialog(Frame owner, String title, boolean modal) { 
     super(owner, title, modal); 
     setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); 

     ... 

     setSize(150, 100); 
     setLocationRelativeTo(owner); 
    } 
} 

Para mostrar el cuadro de diálogo (usando un botón, etc.):

public void actionPerformed(ActionEvent e) { 
    dialog.setVisible(true); 
} 
Cuestiones relacionadas