Как сохранить нижнюю часть виджета браузера SWT видимой при добавлении к содержимому HTML? - PullRequest
1 голос
/ 20 февраля 2009

Я просматриваю HTML в виджете браузера SWT. Я добавляю сообщения регистрации в конец содержимого и хотел бы, чтобы нижняя часть была видна постоянно. В настоящее время, когда я добавляю текст к содержимому, я сначала устанавливаю новый текст:

browser.setText(content);

А потом я прокручиваю виджет Браузер с помощью JavaScript:

browser.execute("window.scrollTo(0,100000);");

Проблема в том, что когда я устанавливаю текст, виджет снова переключается на верх перед прокруткой вниз, поэтому, когда я быстро добавляю много сообщений, виджет браузера большую часть времени показывает верхнюю часть, иногда мерцая при переключении на дно. Это делает невозможным следить за тем, что записывается внизу.

Мне известно, что я мог бы использовать средство просмотра дерева и получить все удобства платформы Eclipse, но есть и версия приложения на Swing, и оба должны использовать один и тот же HTML-код в представлении CSS.

В идеале я бы хотел избежать встраивания компонента Swing, но если есть такой, который позволил бы это, я был бы рад услышать об этом. Я пробовал это с JEditorPane внутри JScrollPane, добавляя к контенту с помощью метода чтения набора редактора:

editorPane.getEditorKit().read(/*...*/);

А затем прокрутите вниз так:

editorPane.setCaretPosition(editorPane.getDocument().getLength());

Это работает очень гладко для автономного приложения Swing, но встроенное в Eclipse, оно мерцает и не успевает за быстрыми обновлениями HTML-контента.

Прямо сейчас единственный способ, которым я могу сделать эту работу плавно в Eclipse, это добавление к содержимому виджета Браузера вместо добавления, но я бы действительно предпочел добавлять новые сообщения внизу, а не вверху.

Ответы [ 2 ]

1 голос
/ 16 июня 2009

Я бы просто добавил это как комментарий, но это не позволило бы мне (недостаточно репутации). Вы можете отправить XUL в нестандартном месте на Mac, установив системное свойство.

System.setProperty ("org.eclipse.swt.browser.XULRunnerPath", "/fubar/xul/Versions/1.9.0.7/");

1 голос
/ 21 февраля 2009

Перезапись всего содержимого HTML каждый раз кажется излишне загруженной работой, и может не быть способа предотвратить прокрутку некоторых браузеров в верх каждый раз, когда вы перерисовываете всю страницу. Особенно, если вы позволите журналам, которые вы показываете, становиться очень длинными, это будет становиться все медленнее и медленнее, поскольку журнал становится длиннее.

Лучшим решением может быть использование JavaScript для добавления на страницу. Вы уже используете

browser.execute()

Как примерно так (при условии, что "itemID" является идентификатором DIV, содержащего содержимое):

String newContent = newContent.replaceAll("\n", "<br>").replaceAll("'", "\\\\'");
browser.execute("document.getElementById(\"itemID\").innerHTML += '"
                newContent + "'");

Вы должны выполнить replaceAll(), и вам может потребоваться еще пара преобразований, в зависимости от содержимого вашего журнала. Я заметил, что browser.execute() не нравится, если скрипт содержит, например, символы новой строки, а одинарные кавычки в вашей строке необходимо заключать в кавычки, как я покажу выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...