powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / setAlwaysOnTop(true) в JDialog
10 сообщений из 10, страница 1 из 1
setAlwaysOnTop(true) в JDialog
    #38823945
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДВС !

Наткнулся на странное поведение (код теста ниже)
jdk 1.6 1.7

1) Запускаем
2) тыкаем в кнопку (открывается модальный диалог)
3) тыкаем мышкой мимо диалога в поле формы
4) закрываем диалог
5) обнаруживаем, что далее главное окно приобрело свойство AlwaysOnTop = true ??? Оно всегда теперь поверх других приложений.... но его свойство AlwaysOnTop = false (проверял).

Если из кода убрать setAlwaysOnTop(true) для диалога, то такого эффекта не будет.

Вопрос залу: как избежать такого эффекта для главного окна оставив setAlwaysOnTop(true) для диалога ?


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
public class TestModal {

    public static void main(String[] args) {
        MFrame frame = new TestModal.MFrame();
        frame.pack();
        frame.setVisible(true);
    }

    private static class MFrame extends JFrame {
        public MFrame() {
            super();
            setPreferredSize(new Dimension(400,300));
            setTitle("frame");
            JButton btn = new JButton("click");
            getContentPane().add(btn);
            btn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    MDialog dialog = new MDialog();
                    dialog.pack();
                    dialog.setLocationRelativeTo(MFrame.this);
                    dialog.setVisible(true);
                }
            });
        }
    }

    private static class MDialog extends JDialog{
        public MDialog() {
            super();    //To change body of overridden methods use File | Settings | File Templates.
            setTitle("dialog");
            setModal(true);
            setAlwaysOnTop(true);
        }
    }
}
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38823952
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-65Наткнулся на странное поведение (код теста ниже)
jdk 1.6 1.7

В устаревшем фреймверке в и неподдерживаемой версии Java? :)
Как-то так?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
                public void actionPerformed(ActionEvent e) {
                    MDialog dialog = new MDialog(MFrame.this);
...

    private static class MDialog extends JDialog{
        public MDialog(JFrame parent) {
            super(parent, true);
...
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38823973
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, спасибо, но
Не, это не влияет [попробуй в поддерживаемой ;) ]

если я правильно понял:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
public class TestModal {

    public static MFrame frame1;

    public static void main(String[] args) {
        MFrame frame = new TestModal.MFrame();
        frame1 = frame;
        frame.pack();
        frame.setVisible(true);
    }

    private static class MFrame extends JFrame {
        public MFrame() {
            super();
            setPreferredSize(new Dimension(400,300));
            setTitle("frame");
            JButton btn = new JButton("click");
            getContentPane().add(btn);
            btn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    MDialog dialog = new MDialog(MFrame.this);
                    dialog.pack();
                    dialog.setLocationRelativeTo(MFrame.this);
                    dialog.setVisible(true);
                }
            });
        }
    }

    private static class MDialog extends JDialog{

        public MDialog(JFrame parent) {
            super(parent);    
            setTitle("dialog");
            setModal(true);
            setAlwaysOnTop(true);
        }
    }
}
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38823977
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И насколько эти устарели для такой то задачки ? :)

C:\Program Files\Java\jre7\bin>java.exe -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

C:\Program Files\Java\jre6\bin>java.exe -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38823981
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока результат тот же...
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38824022
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Временное решение нашел -

после диалога передернуть свойство AlwaysOnTop для главного окна
сначала = true
затем = false
тогда такого эффекта не будет.

типа
Код: java
1.
2.
3.
4.
5.
   ...
   dialog.setVisible(true);
   mainFrame.setAlwaysOnTop(true);
   mainFrame.setAlwaysOnTop(false);
   ...



Но хочется найти правильное решение ...
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38824124
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor-65,

To my absolute delight, this issue appears to be resolved in Java 7 SE! The above example behaves properly running against 7u4 Build b20.

Насколько я смог загуглить данную проблему.
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38824154
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor-65Наткнулся на странное поведение (код теста ниже)
jdk 1.6 1.7
1) Запускаем
2) тыкаем в кнопку (открывается модальный диалог)
3) тыкаем мышкой мимо диалога в поле формы
4) закрываем диалог
5) обнаруживаем, что далее главное окно приобрело свойство AlwaysOnTop = true ??? Оно всегда теперь поверх других приложений....Воспроизводится на (последняя общедоступная):
Код: plaintext
1.
 Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
 Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
Не воспроизводится на (последняя рекомендуемая):
Код: plaintext
1.
 Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
 Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
Значит, исправлено где-то после 7u25

P.S. Импорты не забывайте, когда пример выкладываете.
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38824172
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
setAlwaysOnTop(true) в JDialog
    #38824211
Igor-65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, поставил 1.7.0_71 - эффект исчез.

СПАСИБО !
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / setAlwaysOnTop(true) в JDialog
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]