2009-11-04 9 views

Odpowiedz

27

Oh..it jest dość prosta:

Say masz JFrame, który zawiera JDialog i chcesz JDialog (po otwarciu), aby być na szczycie JFrame.

Więc w konstruktora JDialog, trzeba mieć coś takiego:

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

Innymi słowy, wskaźnik JFrame przejść do okna i wywołać setLocationRelativeTo (...); metoda.

+0

Nie zdawałem sobie sprawy, że ta metoda istnieje; bardzo przydatny! – rob

+6

Wow, to naprawdę mi pomogło! Drobne szczegóły jednak ... powinno się nazywać je TYLKO PO ustawieniu rozmiaru okna dialogowego lub pojawi się okno dialogowe z lewym górnym rogiem wyśrodkowane w oknie nadrzędnym. – Nyerguds

3

O jakim rodzaju okna dialogowego mówisz? Jeśli używasz JOptionPane lub czegoś podobnego, ustaw jego element nadrzędny na JFrame i automatycznie wyśrodkuje on okno JFrame.

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

Jeśli tworzysz własne JDialog, można uzyskać pozycję JFrame Korzystanie JFrame.getLocation() i jego rozmiar przy użyciu JFrame.getSize(). Matematyka jest całkiem prosta; po prostu obliczyć środek JFrame i odjąć połowę szerokości/wysokości JDialog, aby uzyskać lewy górny róg okna dialogowego.

Jeśli twój JDialog nie został jeszcze wyrenderowany, JFrame.getSize() może dać ci zerowy rozmiar. W takim przypadku możesz użyć JDialog.getPreferredSize(), aby dowiedzieć się, jak duży będzie po wyświetleniu na ekranie.

4

zwykle nazywamy następującą metodę:

dialog.setLocationRelativeTo(parent); 

Link to Javadocs

0

Jeśli chcesz modalnego okna dialogowego i skupione na oknie ...

w konstruktorze okna dialogowego:

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

Aby wyświetlić okno dialogowe (za pomocą przycisku itp.):

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