2017-05-27 7 views
1

ich eine modale jframe als Worker-Thread auf einem anderen JFrame mit diesem Code haben:Positionieren eines modalen JFrame

final JDialog loading = new JDialog(this); 
    JPanel p1 = new JPanel(new BorderLayout()); 
    JLabel label = new JLabel("Please wait...", JLabel.CENTER); 
    p1.add(label, BorderLayout.CENTER); 

    loading.setUndecorated(true); 
    loading.getContentPane().add(p1); 
    loading.pack(); 
    loading.setSize(300,100); 
    loading.setLocationRelativeTo(this); 
    loading.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
    loading.setModal(true); 

    SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() { 
     /* code */ 
    }; 
    worker.addPropertyChangeListener(new PropertyChangeListener() { 
     /* code */ 
    }); 
    worker.execute(); 
    loading.setVisible(true); 

Problem ist, dass Java findet, dass „bitte warten ...“ Fenster in der Mitte des Elternteils. Ich möchte in den Boden oder woanders setzen. Ich habe dafür keine Positionsmethode gefunden. Bitte lassen Sie mich wissen, ob es so etwas gibt.

+1

den Dialog verwenden Zentrieren ist genau das, was die [ 'setLocationRelativeTo'] (https://docs.oracle.com/ javase/8/docs/api/java/awt/Window.html # setLocationRelativeTo-java.awt.Component-) Methode macht. Wenn Sie es am unteren Rand platzieren möchten, verwenden Sie [setLocation] (https://docs.oracle.com/javase/8/docs/api/java/awt/Window.html#setLocation-java.awt. Punkt-) Methode. Ermitteln Sie zuerst die Position des übergeordneten Frames mit ['getLocationOnScreen'] (https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#getLocationOnScreen--) und subtrahieren Sie dann die Größe Ihres Dialogs, damit es am unteren Rand erscheint – msrd0

Antwort

1

Get this Grenzen die erforderlichen x (nachdem es verpackt wurde), berechnen, y und loading.setLocation(new Point(x,y));

Verwandte Themen