Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Улучшение дружелюбности GUI, в частности ресайз приложения 
V
    Опции темы
Platon
Дата 9.9.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



Здравствуйте, уважаемые.
Навтыкали мне тут недавно

Цитата(w1nd @  9.9.2008,  15:51 Найти цитируемый пост)
У вас может и шуточки. Отключить перерисовку подложки, включить динамический relayouting и повыкидывать логику из EDT - ничего такого не будет.

Добавлено через 2 минуты и 13 секунд
Цитата(Platon @  9.9.2008,  14:25 Найти цитируемый пост)
В плане ресайзов круче всех Metal LaF с параметром JFrame.setDefaultLookAndFeelDecorated(true), поведение GUI просто идеально

Вы хоть раз пробовали разобраться - отчего? 



Цитата(w1nd @  9.9.2008,  15:51 Найти цитируемый пост)
включить динамический relayouting

Код

Toolkit.getDefaultToolkit().setDynamicLayout(true);

Это делается так? если да, то толку нет.

Как сделать отключение подложки, включить динамический relayouting и отчего  Metal LaF умеет всё это я не знаю smile 

Цитата(w1nd @  9.9.2008,  17:52 Найти цитируемый пост)
Сделайте пример, разберём по косточкам. 


Код

import javax.swing.*;
import java.awt.*;

public class TestGUI {
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);

        JFrame f = new JFrame();
        f.getContentPane().add(buildPanel());
        f.getContentPane().add(BorderLayout.EAST, buildPanel());
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    private static Component buildPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        panel.add(new JLabel("Строчка 1/1"),     new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JTextField("Строчка 1/2"), new GridBagConstraints(1, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JLabel("Строчка 2/1"),     new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JTextField("Строчка 2/2"), new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JLabel("Строчка 3/1"),     new GridBagConstraints(0, 2, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JTextField("Строчка 3/2"), new GridBagConstraints(1, 2, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JLabel("Строчка 4/1"),     new GridBagConstraints(0, 3, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JTextField("Строчка 4/2"), new GridBagConstraints(1, 3, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JLabel("Строчка 5/1"),     new GridBagConstraints(0, 4, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        panel.add(new JTextField("Строчка 5/2"), new GridBagConstraints(1, 4, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2,2,2,2), 1, 1));
        return panel;
    }
}


проблема на картинке.

user posted image

Это сообщение отредактировал(а) Platon - 9.9.2008, 17:51
PM MAIL ICQ   Вверх
dorogoyIV
Дата 9.9.2008, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Platon @  9.9.2008,  17:26 Найти цитируемый пост)
проблема на картинке.

у меня таких проблем не наблюдается  smile 
jre 1.6..., все параметры по умолчанию
PM MAIL   Вверх
serger
Дата 10.9.2008, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: нет
Всего: 5



Аналогично...

user posted image


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Platon
Дата 10.9.2008, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



а вы плавно поведите за уголок.

Добавлено через 10 минут и 55 секунд
Кстати, тачка не 2 ядра, и не мегапроц. На 2-х ядрах этот дефект слабо проявляется, а вот на взрослой (не сказать старенькой) машинке эффект наблюдается.
PM MAIL ICQ   Вверх
dorogoyIV
Дата 10.9.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Platon @  10.9.2008,  06:30 Найти цитируемый пост)
а вы плавно поведите за уголок.

всяко пробовал - и плавно, и быстро, и развернуть/свернуть.
border фрейма плавно растягивается, а после того как мышь отпустили - компоненты растягиваются.
а машина у меня довольно старенькая - покупал еще когда про два ядра не слышно было  smile 
PM MAIL   Вверх
Platon
Дата 10.9.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



Цитата(dorogoyIV @  10.9.2008,  12:11 Найти цитируемый пост)
а после того как мышь отпустили - компоненты растягиваются.

так это уже не есть гуд. надо, чтобы в процессе растягивания растягивались. Порастягивай любой браузер - вот идеальное поведение резинового приложения.
PM MAIL ICQ   Вверх
w1nd
Дата 10.9.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Platon, мне пока не удалось воспроизвести ситуацию, хотя я хорошо её себе представляю; у меня всё растягивается синхронно с окошком, но без каких-либо артефактов. Опишите, что у вас за машинка, под какой (точно) версией java вы запускаете пример.

Добавлено @ 11:23
Цитата(Platon @  10.9.2008,  11:19 Найти цитируемый пост)
так это уже не есть гуд. надо, чтобы в процессе растягивания растягивались.

Нужна, во-первых, опция "показывать содержимое окон при перемещении", во-вторых, нужен динамический layouting.

Это сообщение отредактировал(а) w1nd - 10.9.2008, 11:24


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
w1nd
Дата 10.9.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Повторил. Такое происходит, если установлено в "true" системное свойство "sun.awt.noerasebackground". Надеюсь, не нужно объяснять, почему это вполне закономерно smile Данный эффект нивелируется включением dynamic layout, но только если не блокировать EDT.  При достаточной нагрузке на систему этот эффект проявится и без блокирования EDT, благодаря дефициту процессорного времени.

Когда разрешаются свойственные PLAF заголовки окон, ситуация меняется, потому что у окна нет заголовка и бордюра. Изменение размеров окна обрабатывается уже java-программой и не возникает ситуации, когда его размер изменился, но java-программа об этом ещё не оповещена.

Вопросы есть?

Это сообщение отредактировал(а) w1nd - 10.9.2008, 11:59


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Platon
Дата 10.9.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



Тачка Проц Celeron 2ГГц  ОЗУ 768

Цитата(w1nd @  10.9.2008,  12:21 Найти цитируемый пост)
Нужна, во-первых, опция "показывать содержимое окон при перемещении", во-вторых, нужен динамический layouting.

да-да всё именно так.

Добавлено @ 12:20
Цитата(w1nd @  10.9.2008,  12:51 Найти цитируемый пост)
Вопросы есть?

 smile 
System.getProperty("sun.awt.noerasebackground") - это оно?

Это сообщение отредактировал(а) Platon - 10.9.2008, 12:22
PM MAIL ICQ   Вверх
w1nd
Дата 10.9.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Цитата(Platon @  10.9.2008,  12:17 Найти цитируемый пост)
System.getProperty("sun.awt.noerasebackground") - это оно?

Да. Только в awt анализируется не значение этого свойства, а его наличие.

Это сообщение отредактировал(а) w1nd - 10.9.2008, 12:25


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Platon
Дата 10.9.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



т.е. если оно есть в свойствах, то это true? но я посмотрел, можно сказать, у меня в системе false
1.6.0_5

Это сообщение отредактировал(а) Platon - 10.9.2008, 12:28
PM MAIL ICQ   Вверх
w1nd
Дата 10.9.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Кстати, повторю то, что говорил в инициировавшей данную теме. Всем недовольным быстродействием swing-компонент стоит взглянуть на исходники swt. Вкратце, идея чудовищно проста -  в компонентах не следует производить никаких сложных вычислений при отображении, все необходимые данные должны быть подготовлены заранее, причём в максимально удобном именно для отображения виде. Что это значит? Это значит - никаких рендереров, извлекающих значения из объектов, никаких моделей данных сложнее массива строк, минимизация обратных связей. Только это делает компоненты более отзывчивыми, а вовсе не нативность.

Добавлено @ 12:34
Цитата(Platon @  10.9.2008,  12:27 Найти цитируемый пост)
т.е. если оно есть в свойствах, то это true? но я посмотрел, можно сказать, у меня в системе false1.6.0_5

Нужно чтобы его совсем не было, присваивать false бесполезно.

Это сообщение отредактировал(а) w1nd - 10.9.2008, 12:36


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Platon
Дата 10.9.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



Цитата(w1nd @  10.9.2008,  13:33 Найти цитируемый пост)
Нужно чтобы его совсем не было, присваивать false бесполезно.

Да, я понял, я имел ввиду, также как вы сказали
Цитата(w1nd @  10.9.2008,  12:51 Найти цитируемый пост)
если установлено в "true" системное свойство "sun.awt.noerasebackground"

Потом уточнили, что свойство должно присутствовать / отсутствовать
вот я и написал 
Цитата(Platon @  10.9.2008,  13:27 Найти цитируемый пост)
можно сказать, у меня в системе false

т.е. null
PM MAIL ICQ   Вверх
Platon
Дата 12.9.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 4
Всего: 40



так что мне с проблемой делать?
PM MAIL ICQ   Вверх
w1nd
Дата 12.9.2008, 12:17 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Цитата(Platon @  12.9.2008,  11:43 Найти цитируемый пост)
так что мне с проблемой делать?

Пока проблема не воспроизводится. Или вы всё-таки зарыли где-то свойство noerasebackground smile Начните с пробы другой версии jvm. В любом случае, описанное поведение (неперерисовка фона окна) не является нормой.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.