Kann jemand einfachen Java Swing-Code/Web-Ressource anzeigen, der den Popup-Dialog zentriert über einem vorhandenen JFrame-Fenster positioniert, wenn der JFrame-Button geklickt hat?Java Swing: Positionierungsdialog über vorhandenem Fenster
Antwort
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.
Ü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.
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);
}
Ich wusste nicht, dass diese Methode existiert; ziemlich praktisch! – rob
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