2011-06-28 20 views
1

我有一個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組件相關的類似問題。有人對一個組件進行了修改,這使所有其他組件變得混亂。 – adamjmarkham

回答

0

在將JComponent插入到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)。我創建了自己的類HTMLPaneType,JFXPanel的擴展,並使用HTMLPaneType代替JTextPane。

如果您想響應href點擊,JTextPane需要添加HyperlinkListener。如果您不想響應href點擊或響應不同,HTMLPaneType需要添加偵聽器。就我而言,我想在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方法。無論如何,這是更現代的方法。 –