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

Наткнулся на странное поведение (код теста ниже)
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
03.12.2014, 17:22
    #38823952
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
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
03.12.2014, 17:34
    #38823973
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
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
03.12.2014, 17:38
    #38823977
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
И насколько эти устарели для такой то задачки ? :)

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
03.12.2014, 17:39
    #38823981
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
Пока результат тот же...
...
Рейтинг: 0 / 0
03.12.2014, 18:17
    #38824022
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
Временное решение нашел -

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

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



Но хочется найти правильное решение ...
...
Рейтинг: 0 / 0
03.12.2014, 20:17
    #38824124
smackmychi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
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
03.12.2014, 20:49
    #38824154
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
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
03.12.2014, 21:07
    #38824172
smackmychi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
...
Рейтинг: 0 / 0
03.12.2014, 22:07
    #38824211
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
setAlwaysOnTop(true) в JDialog
Да, поставил 1.7.0_71 - эффект исчез.

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


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