Java Swing: dialog de positionnement en haut de la fenêtre existante

Quelqu’un peut-il afficher une ressource Web / code Java Swing simple qui positionnera la boîte de dialog contextuelle alignée au centre d’une fenêtre JFrame existante lorsque le bouton de JFrame sera cliqué?

Oh..c’est assez simple:

Supposons que vous avez un JFrame contenant un JDialog et que vous voulez que le JDialog (lorsqu’il est ouvert) se trouve juste au-dessus de JFrame.

Donc, dans le constructeur JDialog, vous devriez avoir quelque chose comme:

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

En d’autres termes, passez le pointeur JFrame sur votre boîte de dialog et appelez setLocationRelativeTo (…); méthode.

J’appelle généralement la méthode suivante:

 dialog.setLocationRelativeTo(parent); 

Lien vers Javadocs

De quel type de dialog popup parlez-vous? Si vous utilisez un JOptionPane ou quelque chose de similaire, définissez son composant parent sur JFrame et il sera automatiquement centré sur la fenêtre JFrame.

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

Si vous créez votre propre JDialog, vous pouvez obtenir la position de JFrame à l’aide de JFrame.getLocation () et sa taille à l’aide de JFrame.getSize (). Le calcul est assez simple à partir de là; calculez simplement le centre du cadre JFrame et soustrayez la moitié de la largeur / hauteur du JDialog pour obtenir le coin supérieur gauche de votre boîte de dialog.

Si votre JDialog n’a pas encore été rendu, JFrame.getSize () peut vous donner une taille nulle. Dans ce cas, vous pouvez utiliser JDialog.getPreferredSize () pour savoir quelle sera sa taille une fois affiché à l’écran.

Si vous voulez un dialog modal et centré sur une fenêtre …

Dans le constructeur de la boîte de dialog:

 class CustomDialog extends JDialog { public CustomDialog(Frame owner, Ssortingng title, boolean modal) { super(owner, title, modal); setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); ... setSize(150, 100); setLocationRelativeTo(owner); } } 

Pour afficher la boîte de dialog (à l’aide d’un bouton, etc.):

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