2009-11-04 8 views

Antwort

27

Oh..it ist ziemlich einfach:

Sagen Sie bitte eine JFrame haben, die eine JDialog enthält, und Sie wollen, dass die JDialog (wenn geöffnet) rechts oben auf JFrame sein.

So in JDialog Konstruktor, sollten Sie so etwas wie haben:

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

Mit anderen Worten, JFrame Zeiger auf Ihren Dialog übergeben, und rufen setLocationRelativeTo (...); Methode.

+0

Ich wusste nicht, dass diese Methode existiert; ziemlich praktisch! – rob

+6

Wow, das hat mir wirklich geholfen! Kleines Detail aber ... es sollte nur nach der Einstellung der Dialoggröße aufgerufen werden, oder der Dialog erscheint mit der oberen linken Ecke zentriert auf dem Elternfenster. – Nyerguds

3

Über welche Art von Popup-Dialog sprechen Sie? Wenn Sie ein JOptionPane oder etwas Ähnliches verwenden, legen Sie seine übergeordnete Komponente auf den JFrame fest und es wird automatisch über dem JFrame-Fenster zentriert.

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

Wenn Sie eine eigene JDialog erstellen, können Sie die Position des JFrame erhalten JFrame.getLocation mit() und seine Größe mit JFrame.getSize(). Die Mathematik ist ziemlich einfach von dort; berechne einfach die Mitte des JFrame und subtrahiere die Hälfte der Breite/Höhe des JDialogs, um die obere linke Ecke deines Dialogs zu erhalten.

Wenn Ihr JDialog noch nicht gerendert wurde, gibt JFrame.getSize() möglicherweise eine Nullgröße. In diesem Fall können Sie JDialog.getPreferredSize() verwenden, um herauszufinden, wie groß es sein wird, wenn es einmal auf dem Bildschirm gerendert wurde.

4

Ich nenne in der Regel die folgende Methode:

dialog.setLocationRelativeTo(parent); 

Link to Javadocs

0

Wenn Sie eine modale wollen und zentriert Dialog auf einem Fenster ...

im Konstruktor des Dialog:

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); 
    } 
} 

So zeigen Sie den Dialog an (mit einer Schaltfläche usw.):

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