1

SWT ブラウザ ウィジェットで HTML を表示しています。コンテンツの最後にロギング メッセージを追加していて、常に下部が表示されるようにしたいと考えています。現在、コンテンツにテキストを追加するたびに、最初に新しいテキストを設定します。

browser.setText(content);

次に、JavaScript を使用してブラウザ ウィジェットを下にスクロールします。

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

これに関する問題は、テキストを設定すると、ウィジェットがスクロールダウンする前に再び上部に切り替わるため、多くのメッセージをすばやく追加すると、ほとんどの場合、ブラウザーウィジェットが上部を表示し、切り替え時にちらつきます。ボトム。これにより、下部に記録されている内容を追跡できなくなります。

ツリー ビューアーを使用して Eclipse プラットフォームのすべての利便性を得ることができることは承知していますが、アプリの Swing バージョンもあり、どちらも同じ HTML と CSS プレゼンテーションを使用する必要があります。

理想的には、Swing コンポーネントを埋め込むことは避けたいのですが、これを可能にするものがあれば、喜んでお知らせします。JScrollPane 内の JEditorPane で試してみました。エディター キットの read メソッドを使用してコンテンツに追加します。

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

そして、このように下にスクロールします:

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

これは、スタンドアロンの Swing アプリでは非常にスムーズに機能しますが、Eclipse に組み込まれているとちらつき、HTML コンテンツの高速な更新についていけません。

今のところ、これを Eclipse 内でスムーズに動作させる唯一の方法は、Browser ウィジェットのコンテンツに追加するのではなく先頭に追加することですが、新しいメッセージを上部ではなく下部に追加することを強くお勧めします。

4

2 に答える 2

1

HTML コンテンツ全体を毎回書き直すのは、不必要に忙しい作業のように思えます。また、ページ全体を再描画するたびに一部のブラウザが一番上までスクロールしないようにする方法がない場合があります。特に、表示するログが非常に長くなるのを許可した場合、ログが長くなるにつれて、これはますます遅くなります。

より良い解決策は、JavaScript を使用してページに追加することです。すでに使用している

browser.execute()

次のようなものはどうでしょうか (" itemID" がコンテンツを含む の ID であると仮定しDIVます):

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

replaceAll()ログの内容によっては、さらにいくつかの変換が必要になる場合があります。browser.execute()たとえば、スクリプトに改行が含まれていて、上記のように文字列内の単一引用符を引用符で囲む必要がある場合、それが気に入らないことに気付きました。

于 2009-02-21T00:47:02.183 に答える
1

これをコメントとして追加しただけですが、それはできません(評判が不十分です)。システム プロパティを設定することで、Mac 上の標準以外の場所に XUL を出荷できます。

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

于 2009-06-16T07:35:20.450 に答える