Страницы

Поиск по вопросам

Показаны сообщения с ярлыком gwt. Показать все сообщения
Показаны сообщения с ярлыком gwt. Показать все сообщения

пятница, 20 марта 2020 г.

Хороший пример GWT UiBinder.. где его найти?

#gwt #java


Ссылочку пожалуйста и пример кода. Спасибо.    


Ответы

Ответ 1



На официальном сайте GWT, там вообще можно найти всю необходимую документацию и уроки с примерами. Конкретно по UIBinder вот урок с примерами: http://code.google.com/intl/ru-RU/webtoolkit/doc/latest/DevGuideUiBinder.html

Ответ 2



Неплохой пример использования UIBinder для MVP-подхода.

четверг, 19 марта 2020 г.

Дробные пиксели

#gwt #html #internet_explorer #css


Я всегда считал, что значения в px  могут быть только целыми числами. Но недавно,
отлавливая ошибку в Internet Explorer 10 обнаружил в панели разработчика следующее:



Дробные значения в пикселях везде.

При этом в GWT метод getClientWidth/Height() возвращает только целые значения. Как
сделать совместимость с IE10? У меня во многих местах нужно один абсолютно позиционированный
элемент отображать ровно над другим, а в IE10 он "дергается" (смещение менее, чем на 1 px).

И еще такой вопрос: а остальные величины (offset, padding, margin, coordinates) могут
быть дробными в px?
    


Ответы

Ответ 1



Дробное значение быть может, но это, скорее "неумность" разработчиков, или же "неумность" браузера при высчитывании ширины/высоты определенного DOM-элемента, установленного в дробное значение в процентах, например:
Браузер в таком случае производит простейшие математические действия для преобразования процентного соотношения в пиксельное без последующего преобразования результата в целое число(из дробного). А вообще, дробное значения пикселя - это, конечно же, абсурд. Нельзя "закрасить" половину пикселя или же его треть. Должно быть понятно, что 123.86px == 124px

Ответ 2



@Trash я преобразовал коммент к @Dexter в ответ т.к. считаю что он вполне имеет право быть ответом. Вообще то "css пиксель" состоит не из одного реального пикселя и его размер зависит от масштаба/браузера и число css пикселей может быть не целым! Вот статья

четверг, 13 февраля 2020 г.

Скорость работы: CSS vs JavaScript

#gwt #javascript #css


Что быстрее, и следовательно, что лучше использовать CSS или JavaScript. К примеру,
есть группа элементов, и мне надо выделить один из них, так вот, как это лучше сделать,
добавлением нового класса (и след. нового стиля) или изменить его свойства с помощью
JavaScript? Речь идет не о чистом JavaScript, но для него вопрос тоже актуален, а об
GWT.    


Ответы

Ответ 1



Чистый js: document.write('
'); var s = (new Date()).getTime(); for(var i = 0; i < 100000; ++i) document.body.style.border = '1px red solid'; document.write((new Date()).getTime() - s); document.write('
'); s = (new Date()).getTime(); for(var i = 0; i < 100000; ++i) if(!/(\b|\s)?redBorder(\b|\s)?/i.test(document.body.className)) document.body.className += ' redBorder'; document.write((new Date()).getTime() - s); Добавление класса происходит быстрее (у меня - раз в 25-30), тем более, что можно сначала проверить наличие класса. Если же надо выделить элемент при наведении, то можно обойтись и css-псевдоклассом :hover.

Ответ 2



Провел второй тест. Результаты в Хроме опустились до 10 к 1. В остальных браузерах мало что поменялось. Примечание: выполнять добавление обводки надо каждым способом поодиночке, иначе получаются неправильные результаты.

Ответ 3



Выделение одного элемента из группы - это изменение его свойств относительно базовых свойств. Это прямая работа CSS по его философии в WEB Три столпа: HTML для данных, разметки и каркаса верстки CSS для задания визуальных свойств и параметров отображения/поведения каркаса JavaScript для динамики, взаимодействия с окружением и программных задач В вашем случае: Выделение элементов это изменение его отображения, эту часть надо делать добавление класса CSS Само назначение класса выделения может быть сделано через CSS (:hover на самом элементе или на родителе, если это возможно), либо через JavaScript по более сложным условиям (клик по-другому элементу, перемотка ползунка, ввод суммы на форме и так далее) По поводу быстродействия - вы можете провести 1000 и 1 тест для каждого варианта. Но это лишнее. Старайтесь делать задачу "правильно" с точки зрения философии разработки или принятой методологии. Оптимизация - это дело разработчиков браузеров и интерпретаторов. Кстати, оптимизировать они будут только те варианты поведения разработчиков, которые приняты опять же в большинстве случаев Главное, не парсите CSS-файл с помощью JS и не назначайте каждое свойство CSS каждому элементу DOM. Да, утрирую. Но ведь это возможно сделать. Но вы же не будете замерять время работы этого ужаса? Потому что так не принято делать

Чем отличается preventDefault() от stopPropagation()?

#gwt #java


Я использую оба метода, когда хочу закончить обработку события. Примерно как метод
comsume() в Swing. И всегда ставлю вызовы этих методов вместе. Есть ли разница между 
preventDefault() и stopPropagation()?
В документации сказано, что 

stopPropagation
Останавливает распространение базового нативного события.
preventDefault
Предотвращает действие по умолчанию базового нативного события.

Как-то так. Но ясности это не вносит.    


Ответы

Ответ 1



preventDefault запрещает стандартное поведение элемента. Например, клик на кнопку сабмита производит отправку формы, preventDeafult это прекратит. Нажатие на ссылку перенаправляет на другую страницу $('a').preventDefault(); запретит это действе. Ссылка станет просто активной подчеркнутой областью. stopPropagation запрещает передачу события от ребенка к родителю, то есть, если мы кликнули по вложенному диву, его родитель "не почувствует" этого нажатия. Идеи примеров использования. preventDefault: Тут все просто. Аяксовые ссылки. stopPropagation: например, кнопки поверх картинки. Если кликаем по картинке, включается следующая, если по кнопкам - какое-то другое действие, скажем, лупа. P.S. кликами все не ограничивается ;)

Ответ 2



Ну про stopPropagation ни чего сказать не могу, а про preventDefault этот метод не дает сработать базовым функциям, например хочешь ты на какую нибудь ссылку повесить обработчик вот тогда тебе это и надо ставить что б комп не перешол по сслыку а выполнил твой код. Как то так.

среда, 29 января 2020 г.

Индикатор процесса загрузки файла

#gwt #java


Можно ли сделать индикатор процесса загрузки файла на сервер (отображать процент
загруженного файла) без GET запросов в течение загрузки (очень популярный пример в
интернете)?
    


Ответы

Ответ 1



Взгляните на библиотеку gwtupload — она очень проста в использовать и прекрасно работает во всех браузерах и ОС, я проверял. Она использует Ajax запросы для расчета прогресса. Кстати SWFUpload не работает в Linux и Mac. Пока что это лучшее решение для GWT.

Ответ 2



Ещё можно использовать comet, но это довольно мучительно, много проблем с переносимостью. Зато latency будет намного лучше, чем у нескольких GET'ов.

Ответ 3



ну многие юзают флешь - ам скорее всего что то встроенное есть - не специалист - говорить не буду. возможно есть какие то другие библиотеки насчет сервера - вы получаете post запрос. возможно в заголовке будет указан размер пакета(файла) - если поток парсите (по крайней мере я такую задачу делал на апаче - есть память-буфер на сервере - 2 метра и юзер заливает 100 метровый файл - алгоритм мутный очень сильно привязанк веб протоколу, но можно сделать однопроходным). ну так вот в подобном алгоритме вы всегда можете понять сколько уже сохранили от клиента. если отнять от величину указанной в заголовке уже полученный размер - и сохранить величину в какой нибудь memcache - то периодическим вторым запросом от клинта можно получать и отображать информацию о загрузке. Делать руками - можно но слишком долго и муторно. возможно некоторые веб серверы автоматически предоставляют нужный функционал - например какой нибудь каллбек при считывании очередных 2 мегабайт от клиента я делал это на с. но в яве (в сервлете) тоже возможно получить поток и парсить его самостоятельно.

Ответ 4



Советую посмотреть, как работает GMail при прикреплении файла к письму. Посылаемые запросы можно просмотреть с помощью Fire Bug.

Ответ 5



без запросов - никак))) только очень примерно, и то парочку придется сделать делай их просто редкими, вернее, в начале частые, считай скорость, а потом уточняй редкими запросами хотя, возможно, это и вытягивается из браузера. но примеров не встречал. думаю, проще кинуть 5 GET

четверг, 23 января 2020 г.

Как в одной ячейке grid'a вывести 2 даты с разделителем?

#java #gwt #дата #grid #merge


Мне необходимо при выводе информации из бд в одной ячейке таблицы grid выводить 2
даты в формате

dd.MM.yyyy-dd.MM.yyyy 


Первая дата берется из одного поля класса, другая, соответственно, из другого.


    


Ответы

Ответ 1



Вопрос очень размытый, но в первом приближении решение (за исключением названий и методов полей для дат) выглядит вот так: .... dataGrid.addColumn(new TextColumn { public String getValue(DbType dbType) { SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); return sdf.format(dbType.getDate1())+"-"+sdf.format(dbType.getDate2()); } } );

вторник, 7 января 2020 г.

Не удается применить атрибуты стиля в GWT

#java #исключения #gwt


При попытке применить атрибут стиля не в camel-case формате падает исключение. Как
применить атрибут, если его нельзя использовать в другом формате? например, -moz-user-select.    


Ответы

Ответ 1



Еще можно написать такой метод в какой-нибудь утилитный класс: public static native void setProperty(Style style, String name, String value) /*-{ style[name] = value; }-*/; и добавлять свойство через него SomeUtil.setProperty(getElement().getStyle(), "-moz-user-select", "none");

Ответ 2



Создай стиль в css-файле с нужным свойством .stylename { -moz-user-select: none; } и примени его вот так: getElement().addStyle(".stylename");

воскресенье, 5 января 2020 г.

Java & GWT: Web-приложение с desktop-версией

#gwt #java #база_данных #ios #веб_программирование


Постановка задачи:

Разработать web-приложение для пользователей Windows, Linux, iPad, возможно MacOS,
не для iPod и других мобильных платформ. С desktop-версией для Windows, Linux, MacOS,
способной работать без активного соединения с интернет и выполнять весь основной функционал.
Основной функционал заключается в произведении вычислений и генераций .txt, .doc, .pdf
документов, на основе выбранных на форме пользователем параметров и данных из БД.

Предлагаемое решение:


Основной функционал готовить в виде общих библиотек (для использования в обоих версиях)
на Java и БД sqlite.

Версия-web: на клиенте только GUI на Java GWT, основной функционал выполняется на
Java веб-сервере.

Версия-desktop: GUI на Java Swing, основной функционал выполняется на клиенте.

Логику приложения реализовать вместе с (на стороне) GUI, которая обращается посредством
веб-сервера (web-версия) или напрямую (desktop-версия) к интерфейсным функциям общей
библиотеки для выполнения основного функционала.


Имеются вопросы: 

Используем NetBeans 7, настольные приложения Swing и веб-службы SOAP/REST на Java,
там разрабатываются довольно просто. Есть проблемы с установкой и настройкой GWT. Насколько
адекватно поддерживается в netbeans GWT? Альтернативы IDE?

Идея с общей библиотекой для основного функционала выглядит обнадеживающе, это только
наши иллюзии или это вполне реализуемо?

Дополнение к п.2.: можно ли одно и то же хранилище данных sqlite использовать и на
сервере и на клиенте? Какие еще есть альтернативы?

Дополнение к п.2.: имеются ли готовые библиотеки на Java для работы с документами
форматов .doc и .pdf?

GWT используем для обеспечения работоспособности версии-web на всех вышеперечисленных
платформах, могут ли нас ожидать проблемы несовместимости?

Desktop приложения на Swing по разному выглядят на Windows и Linux. Похоже, как выяснилось,
потому, что компоненты Swing надстроены над AWT. Эта проблема решаема, т.е., можно
ли оформить интерфейс так, что бы выглядело всегда одинаково?
UPD

GWT приложение транслируется в JS во время выполнения на сервере, или приложение
сначала транслируется в JS код и только затем развертывается на сервере?
UPD 2

Дополнение к п.2.: имеются ли готовые библиотеки на Java для генераций .dxf документов?

    


Ответы

Ответ 1



Для Eclipse есть очень удобный плагин для работы с gwt Общая библиотека это хорошо, но, вероятно, будет много различий, ведь как-никак инструментарий для разработки gwt web приложений и desktop приложений весьма отличается. Всё зависит от того, что Вы собираетесь пихать в эту библиотеку, и что у Вас вообще за проект. Всё зависит от поставленных задач и проекта. работа с .pdf,работа с .doc Вряд ли. Можно. ссылка JS код компилируется вместе с приложением, на сервере уже хранится в виде JS. Исключение - hosted mode - режим, сделанный для удобства разработки. Для браузера нужно поставить соответствующий плагин, чтобы видеть приложение в таком режиме. Плюсы - возможность отладки и публикация изменений на сервер "на лету".

Ответ 2



Как альтернатива Net Beans'у - Intellij Idea (есть платна и бесплатная, бесплатную нужно настроить). Если gwt, то тогда ext-gwt: http://www.gwt-ext.com/demo/ По поводу 6-го пункта в swing скины, хорошая статья по этому поводу на хабре http://habrahabr.ru/blogs/java/128755/

Ответ 3



Я использую Eclipse в подобных экспериментах. Вроде работает. По внешнему виду SmartGWT значительно лучше GWT , а механизм связи с сервером тот же. Советую обратить внимание на него. http://www.smartclient.com/smartgwt/showcase/#main это примеры. А почему бы не сделать вместо десктоп и веб версий только одну - Веб (с локальным сервером и базой) ? UPD Поподробнее... Я делаю в основном, как описано в http://code.google.com/intl/ru/webtoolkit/doc/1.6/tutorial/gettingstarted.html . Делаю 2 части в Eclipse. Клиентская транслируется в JS, серверная .jar. Они общаются по GWT RPC (это все есть в tutorial). Все исполнимое получается в war/ (Eclipse). Его содержимое кладу в webapps/ в Tomcat, который слушает порт 8080 (если пересекается с Oracle, то передвигаю на 18080). Браузер соединяется с Tomcat и запрашивает html приложения. В общем, локальный и удаленный варианты не отличаются (так сказать, локальный web, если сервер/база установлены на машине пользователя).

суббота, 7 декабря 2019 г.

Как добавить возможность изменять размеры столбцов таблицы с помощью мыши в GWT?

#gwt #java


Не хочу использовать gwt-ext и подобные ради этой цели. Как на чистом GWT реализовать
ресайзеры для столбцов таблицы?    


Ответы

Ответ 1



Есть два основных варианта, как это можно сделать: Отслеживать сообщения MouseDown/Move/Up с помощью sinkEvents & onBrowserEvent в самой компоненте заголовка, и анализировать координату если она +/-5 от границы, то обрабатывать как при dnd. Использовать отдельные компоненты в качестве управляющих изменением размера, и поместить их поверх заголовка таблицы, например, с помощью layout panel, и сделать невидимыми (opacity = 0.0). Второй способ более правильный, он используется, например, в google-docs (главная таблица с файлами).

Ответ 2



В GWT-2.2-M1 эта функциональность есть в самой библиотеке. См.коммит от 7 янв 2011.

понедельник, 25 ноября 2019 г.

Способы подписки на события


В GWT подписаться на события можно несколькими способами. В частности, существую
следующие методы: addHandler(), addDomHandler(), addBitlessDomHandler() и методы для конкретных событий.

Кроме того, на события можно подписаться с помощью методов sinkEvents и onBrowserEvent:

new SomeWidget() {
    {
        sinkEvents(Event.MOUSEEVENTS); // for example
    }

    public void onBrowserEvent(Event event) {
        super.onBrowserEvent(event);
        int type = DOM.eventGetType(event);
        if (type == Event.ONMOUSEDOWN) {
            ...
        } else if ...
    }
}


Если имеется не widget, а элемент, то можно подписаться на события так:

DOM.sinkEvents(element, Event.MOUSEEVENTS);
DOM.setEventListener(element, new EventListener() {
    @Override
    public void onBrowserEvent(Event event) {
        int type = DOM.eventGetType(event);
        if (type == Event.ONMOUSEDOWN) {
            ...
        } else if ...
    }
});


В чем разница между этими способами? В каких случаях нужно использовать каждый из них? Каковы их недостатки и достоинства?
    


Ответы

Ответ 1



В первом случае все объекты класса SomeWidget будут "по умолчанию" иметь слушатель onBrowserEvent(Event event) и срабатывать на установленный Вами Event.MOUSEEVENTS. Во втором же случае, вышеперечисленные свойства будут относиться лишь к тем елементам, которые Вы укажете. Тоесть, в данном случае: DOM.sinkEvents(someWidget1, Event.MOUSEEVENTS); DOM.setEventListener(someWidget1, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } }); DOM.sinkEvents(someWidget2, Event.ONCLICK); DOM.setEventListener(someWidget2, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } }); объекты someWidget1 и someWidget1 одного и того же класса, имеют разный event, то время, как с использованием первого способа все объекты данного класса имели бы один и тот же event. Надеюсь, что помог Вам.

пятница, 12 июля 2019 г.

Есть ли в GWT слайдер или как его сделать самому?

Искал, но не нашел никакой компоненты типа JSlider, только в GWT. Есть ли он, и если нет, то как можно написать такой слайдер самому?


Ответ

Стандартного компонента нет, однако, на инкубаторе есть готовый. http://code.google.com/p/google-web-toolkit-incubator/wiki/SliderBar Кроме того, в extjs также есть такой компонент. Вот пример: http://www.java2s.com/Code/Java/GWT/VerticalHorizontalSliderExtGWT.htm По extjs есть ещё демо-страничка, показываяющая разные контролы, что у них есть. Возможно, вас заинтересует: http://dev.sencha.com/deploy/dev/examples/

воскресенье, 30 июня 2019 г.

Как определить id клиента в gwt приложении?

Есть GWT проект, лежащий на Tomcat-сервере
В приложении пользователи могут нажать кнопку получить баланс и изменить его - данные приходят и отправляются на сервер, где происходит работа с базой данной. Все работает.
Но я в самом клиентском коде написал значение id = 1, и получается абсолютно все, кто заходит на сервер приложения, работают с одним и тем же балансом, с одной и той же строчкой в базе данных. Форма авторизации не предусмотрена. Http протокол я не использую, у нас же в gwt асинхронные запросы на сервер.
Как мне определять id и задавать его конкретно под каждого пользователя?
Я читал про Cookie, но не знаю, то ли это. Там есть какой-то метод Cookies.getCookie("JSESSIONID"));. Скажите, это то, что надо?
Если да, то что это за значения jsessionid, ведь там совсем не цифры?
Если совсем не то, то какие есть еще способы назначать id для каждого клиента, и чтоб он не менялся?


Ответ

Это делается примерно так:
Клиент подключается к серверу; Сервер генерирует уникальный идентификатор и запоминает его и передает клиенту; Клиент в каждом последующем запросе передает этот идентификатор а сервер определяет что это за клиент уже по этому идентификатору.

пятница, 7 июня 2019 г.

Не удается применить атрибуты стиля в GWT

При попытке применить атрибут стиля не в camel-case формате падает исключение. Как применить атрибут, если его нельзя использовать в другом формате? например, -moz-user-select.


Ответ

Еще можно написать такой метод в какой-нибудь утилитный класс: public static native void setProperty(Style style, String name, String value) /*-{ style[name] = value; }-*/; и добавлять свойство через него SomeUtil.setProperty(getElement().getStyle(), "-moz-user-select", "none");

Дробные пиксели

Я всегда считал, что значения в px могут быть только целыми числами. Но недавно, отлавливая ошибку в Internet Explorer 10 обнаружил в панели разработчика следующее:

Дробные значения в пикселях везде.
При этом в GWT метод getClientWidth/Height() возвращает только целые значения. Как сделать совместимость с IE10? У меня во многих местах нужно один абсолютно позиционированный элемент отображать ровно над другим, а в IE10 он "дергается" (смещение менее, чем на 1 px).
И еще такой вопрос: а остальные величины (offset, padding, margin, coordinates) могут быть дробными в px?


Ответ

Дробное значение быть может, но это, скорее "неумность" разработчиков, или же "неумность" браузера при высчитывании ширины/высоты определенного DOM-элемента, установленного в дробное значение в процентах, например:

Браузер в таком случае производит простейшие математические действия для преобразования процентного соотношения в пиксельное без последующего преобразования результата в целое число(из дробного). А вообще, дробное значения пикселя - это, конечно же, абсурд. Нельзя "закрасить" половину пикселя или же его треть. Должно быть понятно, что 123.86px == 124px

среда, 15 мая 2019 г.

Чем отличается preventDefault() от stopPropagation()?

Я использую оба метода, когда хочу закончить обработку события. Примерно как метод comsume() в Swing. И всегда ставлю вызовы этих методов вместе. Есть ли разница между preventDefault() и stopPropagation()? В документации сказано, что stopPropagation Останавливает распространение базового нативного события. preventDefault Предотвращает действие по умолчанию базового нативного события. Как-то так. Но ясности это не вносит.


Ответ

preventDefault запрещает стандартное поведение элемента. Например, клик на кнопку сабмита производит отправку формы, preventDeafult это прекратит. Нажатие на ссылку перенаправляет на другую страницу $('a').preventDefault(); запретит это действе. Ссылка станет просто активной подчеркнутой областью. stopPropagation запрещает передачу события от ребенка к родителю, то есть, если мы кликнули по вложенному диву, его родитель "не почувствует" этого нажатия. Идеи примеров использования. preventDefault: Тут все просто. Аяксовые ссылки. stopPropagation: например, кнопки поверх картинки. Если кликаем по картинке, включается следующая, если по кнопкам - какое-то другое действие, скажем, лупа. P.S. кликами все не ограничивается ;)

воскресенье, 31 марта 2019 г.

Индикатор процесса загрузки файла

Можно ли сделать индикатор процесса загрузки файла на сервер (отображать процент загруженного файла) без GET запросов в течение загрузки (очень популярный пример в интернете)?


Ответ

Взгляните на библиотеку gwtupload — она очень проста в использовать и прекрасно работает во всех браузерах и ОС, я проверял. Она использует Ajax запросы для расчета прогресса. Кстати SWFUpload не работает в Linux и Mac. Пока что это лучшее решение для GWT.

вторник, 5 февраля 2019 г.

Java & GWT: Web-приложение с desktop-версией

Постановка задачи: Разработать web-приложение для пользователей Windows, Linux, iPad, возможно MacOS, не для iPod и других мобильных платформ. С desktop-версией для Windows, Linux, MacOS, способной работать без активного соединения с интернет и выполнять весь основной функционал. Основной функционал заключается в произведении вычислений и генераций .txt, .doc, .pdf документов, на основе выбранных на форме пользователем параметров и данных из БД. Предлагаемое решение: Основной функционал готовить в виде общих библиотек (для использования в обоих версиях) на Java и БД sqlite. Версия-web: на клиенте только GUI на Java GWT, основной функционал выполняется на Java веб-сервере. Версия-desktop: GUI на Java Swing, основной функционал выполняется на клиенте. Логику приложения реализовать вместе с (на стороне) GUI, которая обращается посредством веб-сервера (web-версия) или напрямую (desktop-версия) к интерфейсным функциям общей библиотеки для выполнения основного функционала. Имеются вопросы: Используем NetBeans 7, настольные приложения Swing и веб-службы SOAP/REST на Java, там разрабатываются довольно просто. Есть проблемы с установкой и настройкой GWT. Насколько адекватно поддерживается в netbeans GWT? Альтернативы IDE? Идея с общей библиотекой для основного функционала выглядит обнадеживающе, это только наши иллюзии или это вполне реализуемо? Дополнение к п.2.: можно ли одно и то же хранилище данных sqlite использовать и на сервере и на клиенте? Какие еще есть альтернативы? Дополнение к п.2.: имеются ли готовые библиотеки на Java для работы с документами форматов .doc и .pdf? GWT используем для обеспечения работоспособности версии-web на всех вышеперечисленных платформах, могут ли нас ожидать проблемы несовместимости? Desktop приложения на Swing по разному выглядят на Windows и Linux. Похоже, как выяснилось, потому, что компоненты Swing надстроены над AWT. Эта проблема решаема, т.е., можно ли оформить интерфейс так, что бы выглядело всегда одинаково? UPD GWT приложение транслируется в JS во время выполнения на сервере, или приложение сначала транслируется в JS код и только затем развертывается на сервере? UPD 2 Дополнение к п.2.: имеются ли готовые библиотеки на Java для генераций .dxf документов?


Ответ

Для Eclipse есть очень удобный плагин для работы с gwt Общая библиотека это хорошо, но, вероятно, будет много различий, ведь как-никак инструментарий для разработки gwt web приложений и desktop приложений весьма отличается. Всё зависит от того, что Вы собираетесь пихать в эту библиотеку, и что у Вас вообще за проект. Всё зависит от поставленных задач и проекта. работа с .pdfработа с .doc Вряд ли. Можно. ссылка JS код компилируется вместе с приложением, на сервере уже хранится в виде JS. Исключение - hosted mode - режим, сделанный для удобства разработки. Для браузера нужно поставить соответствующий плагин, чтобы видеть приложение в таком режиме. Плюсы - возможность отладки и публикация изменений на сервер "на лету".

пятница, 23 ноября 2018 г.

Как добавить возможность изменять размеры столбцов таблицы с помощью мыши в GWT?

Не хочу использовать gwt-ext и подобные ради этой цели. Как на чистом GWT реализовать ресайзеры для столбцов таблицы?


Ответ

Есть два основных варианта, как это можно сделать: Отслеживать сообщения MouseDown/Move/Up с помощью sinkEvents & onBrowserEvent в самой компоненте заголовка, и анализировать координату если она +/-5 от границы, то обрабатывать как при dnd. Использовать отдельные компоненты в качестве управляющих изменением размера, и поместить их поверх заголовка таблицы, например, с помощью layout panel, и сделать невидимыми (opacity = 0.0). Второй способ более правильный, он используется, например, в google-docs (главная таблица с файлами).

вторник, 2 октября 2018 г.

Способы подписки на события

В GWT подписаться на события можно несколькими способами. В частности, существуют следующие методы: addHandler(), addDomHandler(), addBitlessDomHandler() и методы для конкретных событий.
Кроме того, на события можно подписаться с помощью методов sinkEvents и onBrowserEvent
new SomeWidget() { { sinkEvents(Event.MOUSEEVENTS); // for example }
public void onBrowserEvent(Event event) { super.onBrowserEvent(event); int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } }
Если имеется не widget, а элемент, то можно подписаться на события так:
DOM.sinkEvents(element, Event.MOUSEEVENTS); DOM.setEventListener(element, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
В чем разница между этими способами? В каких случаях нужно использовать каждый из них? Каковы их недостатки и достоинства?


Ответ

В первом случае все объекты класса SomeWidget будут "по умолчанию" иметь слушатель onBrowserEvent(Event event) и срабатывать на установленный Вами Event.MOUSEEVENTS. Во втором же случае, вышеперечисленные свойства будут относиться лишь к тем елементам, которые Вы укажете. Тоесть, в данном случае:
DOM.sinkEvents(someWidget1, Event.MOUSEEVENTS); DOM.setEventListener(someWidget1, new EventListener() {
@Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
DOM.sinkEvents(someWidget2, Event.ONCLICK); DOM.setEventListener(someWidget2, new EventListener() {
@Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
объекты someWidget1 и someWidget1 одного и того же класса, имеют разный event, в то время, как с использованием первого способа все объекты данного класса имели бы один и тот же event
Надеюсь, что помог Вам.

понедельник, 1 октября 2018 г.

Способы подписки на события

В GWT подписаться на события можно несколькими способами. В частности, существуют следующие методы: addHandler(), addDomHandler(), addBitlessDomHandler() и методы для конкретных событий.
Кроме того, на события можно подписаться с помощью методов sinkEvents и onBrowserEvent
new SomeWidget() { { sinkEvents(Event.MOUSEEVENTS); // for example }
public void onBrowserEvent(Event event) { super.onBrowserEvent(event); int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } }
Если имеется не widget, а элемент, то можно подписаться на события так:
DOM.sinkEvents(element, Event.MOUSEEVENTS); DOM.setEventListener(element, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
В чем разница между этими способами? В каких случаях нужно использовать каждый из них? Каковы их недостатки и достоинства?


Ответ

В первом случае все объекты класса SomeWidget будут "по умолчанию" иметь слушатель onBrowserEvent(Event event) и срабатывать на установленный Вами Event.MOUSEEVENTS. Во втором же случае, вышеперечисленные свойства будут относиться лишь к тем елементам, которые Вы укажете. Тоесть, в данном случае:
DOM.sinkEvents(someWidget1, Event.MOUSEEVENTS); DOM.setEventListener(someWidget1, new EventListener() {
@Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
DOM.sinkEvents(someWidget2, Event.ONCLICK); DOM.setEventListener(someWidget2, new EventListener() {
@Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
объекты someWidget1 и someWidget1 одного и того же класса, имеют разный event, в то время, как с использованием первого способа все объекты данного класса имели бы один и тот же event
Надеюсь, что помог Вам.