2017-05-27 45 views
1

我有一個模式jframe作爲與此代碼另一個JFrame的頂部的工作線程:定位模態的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); 

問題是Java將會把那「請稍候...」窗口在中心的父母。我想放在底層或其他地方。我沒有找到一個位置方法。請讓我知道是否存在這樣的事情。

+1

居中的對話框也正是['setLocationRelativeTo'](https://docs.oracle.com/ javase/8/docs/api/java/awt/Window.html#setLocationRelativeTo-java.awt.Component-)方法正在執行。如果您想將其放置在底部,請使用['setLocation'](https://docs.oracle.com/javase/8/docs/api/java/awt/Window.html#setLocation-java.awt。 Point-)方法。首先用['getLocationOnScreen'](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#getLocationOnScreen--)獲取父幀的位置,然後減去大小使對話框顯示在底部邊緣 – msrd0

回答

1

獲取this界限(它已經打包後),計算所需的X,Y和使用loading.setLocation(new Point(x,y));