2011-06-28 15 views
1

JTextPaneがあります.JTextPaneにJComponentを挿入する必要があります。私は使用していますJTextPane挿入コンポーネント、垂直方向の配置が正しくありません

JTextPane.insertComponent(Component) 

実際にアイテムが挿入されていますが、垂直方向の位置が高すぎます。コンポーネントの下部が現在のテキスト行のベースラインに揃えられる代わりに、コンポーネントはその位置より上にあり、上に表示されているテキストのアウト/ペイントラインをブロックします。

私は、挿入されたコンポーネントとJTextPaneの両方で、さまざまな値でsetAlignmentY(float)を呼び出そうとしましたが、動作にはまったく影響しません。

私の推測:私のJTextPaneまたはそのドキュメント内には、私が変更する必要がある状態があるようです。しかし、私はそれが何であるか分からない。

+0

[使用したテキストコンポーネント](http://download.oracle.com/javase/tutorial/uiswing/components/text.html)。 – mre

+0

問題は消えました。チームの他の人が、テキストペインのテキストを「拡大」することに関連するいくつかの変更を取り消しました。残念ながら、私はそのコードのどの側面が望ましくない動作の原因であるかを教えてくれません。 –

+0

お分かりいただきありがとうございます。 Swingコンポーネントに関連する同様の問題が発生しました。誰かが1つのコンポーネントに変更を加えましたが、これは他のすべてのコンポーネントを混乱させます。 – adamjmarkham

答えて

0

JTextPaneに挿入する前に、JComponentでsetSize(width, height)を呼び出してみましたか?ほとんどのコンポーネントでうまくいくはずです。

+0

希望の効果がありませんでした。 –

0

私は知っている、これはかなり古い質問ですが、あなたのsetAlignmentYの使用方法はまったく正しいです。返さ 値に応じてコンポーネントがテキストベースラインに相対的に配置され

:アライメントについては、以下のことが動作しない原因が、JTextPane.insertComponent(コンポーネント)のjavadocはどのようなコードを知っていると言うしないでくださいComponent.getAlignmentYによる。 Swingコンポーネントの場合、 の値は、 JComponent.setAlignmentYメソッドを使用して便利に設定できます。ベースライン

未満であることが、例えば、0.75の値を設定すること 成分の75%がベースラインより上であることが原因となり、そして成分の25パーセント だからtextPane.setAlignmentY(1.0f)を使用して所望の効果を有します。

-1

同じ問題が発生し、JTextPaneまたはJEditorPaneを使用して解決策を見つけることができませんでした。しかし、私はJavaFX/WebView/WebEngine/JFXPanelを使用することができました。 Java 8(JDK 1.8)に更新する必要があります。 JFXPanelの拡張である自分のクラスHTMLPaneTypeを作成し、JTextPaneの代わりにHTMLPaneTypeを使用しました。

hrefのクリックに応答する場合は、JTextPaneにHyperlinkListenerを追加する必要があります。 HTMLPaneTypeでは、hrefのクリックに応答しない場合や、別の方法で応答する場合にリスナーを追加する必要があります。私の場合、hrefのクリックで外部ブラウザを起動したかったのです。私はJTextPaneと拡張JFXPanelの両方でこれを実行できました。参照してください
http://blogs.kiyut.com/tonny/2013/07/30/javafx-webview-addhyperlinklistener/#.VK-JIHsueWN

+0

JTextPane/JEditorPaneを使用して配置の問題を解決できないことがあります。オリジナルのポスターは、「私は、挿入されたコンポーネントとJTextPaneの両方で、さまざまな値を持つsetAlignmentY(float)を呼び出そうとしましたが、動作にはまったく影響しません」と述べています。 textPane.setAlignmentY(1.0f)が機能しない可能性があります。そのような場合は、JavaFX/WebView/WebEngine/JFXPanelのアプローチを検討する必要があります。これはもっと近代的な方法です。 –

関連する問題