Мой код содержит JFrame, который после определенного действия отображает немодальный JDialog. Ожидается, что пользователь перетянет объект из JFrame в JDialog. У меня проблема, которая появляется только в Solaris CDE (Common Desktop Environment): открытие JDialog правильно размещает окно в верхней части фрейма. После того, как пользователь нажимает на фрейм, за ним исчезает диалоговое окно, вынуждая пользователя изменить положение фрейма, чтобы поместить его помимо JDialog. Ожидаемое поведение - JDialog остается поверх родительского фрейма.
Следующий код демонстрирует ситуацию:
public class MyFrame extends JFrame
{
public MyFrame()
{
JButton btn = new JButton("Push me");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
JDialog dialog = new JDialog(MyFrame.this);
dialog.getContentPane().add(new JLabel("I'm a dialog!!!"));
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
}
});
getContentPane().add(btn);
pack();
}
public static void main(String args[])
{
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
}
Эта проблема не при запуске какого-либо другого оконного менеджера на солярисе, а также windows и linux (GNOME). Подобный вопрос был задан некоторое время назад ( Как сделать так, чтобы немодальное диалоговое окно оставалось поверх его родительского элемента в Solaris CDE ), но оно остается нерешенным.