Я создаю два диалога:
DialogA: setVisible(true)
называется только один раз.
DialogB: setVisible(true)
и setAlwaysOnTop(true)
называется каждые 1,5 секJDialog.setAlwaysOnTop (true) выводит все диалоги на передней панели под Windows
Окна: Каждый вызов dialogB.setAlwaysOnTop(true)
приносит dialogA И dialogB на фронт.
OSX: Каждый вызов dialogB.setAlwaysOnTop (true) выводит только диалогB спереди. (Ожидаемое поведение)
Test Case (Windows):
1 я запустить приложение из моего IDE.
2 Я вижу DialogA.
3 Я щелкаю по IDE, и DialogA исчезает.
4 Через одну секунду отобразятся DialogA и DialogB.
5 Я щелкаю по IDE, а DialogA и DialogB исчезает. GOTO 4
Ожидаемое поведение (OSX):
4. Через одну секунду появится DialogB.
5. Я нажимаю IDE, и DialogB исчезает. GOTO 4
Вопрос:
Как получить ожидаемое поведение под Windows?
import javax.swing.JDialog;
import javax.swing.JLabel;
public class JDialogSetAlwaysonTopTEST
{
public static void main(String[] p_Strings)
{
final JDialog dialogA = new JDialog();
dialogA.setLocation(0, 0);
dialogA.add(new JLabel("DialogA: Click on the overlapped window"));
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
dialogA.pack();
dialogA.setVisible(true);
}
});
try {Thread.sleep(3000);} catch (InterruptedException e){}
final JDialog dialogB = new JDialog();
dialogB.setLocation(70, 70);
dialogB.add(new JLabel("DialogB: Do you see DialogA?"));
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
dialogB.pack();
dialogB.setVisible(true);
}
});
while(true)
{
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
dialogB.setAlwaysOnTop(true); //prerequisite
dialogB.setVisible(true);
dialogB.setAlwaysOnTop(false); //prerequisite
}
});
try {Thread.sleep(1500);} catch (InterruptedException e){}
}
}
}
Не знаю, если это будет иметь значение, но вы могли бы начать соблюдая политику потоков Swing, и используйте только компоненты Swing из EDT. –
Вы по-прежнему создаете и изменяете компоненты поворота в основном потоке. Все, кроме сна, должно быть сделано на EDT. –
Вы правы! Но результат остается тем же. – Peter