2011-02-28 29 views
1

我想做一個組件,它顯示JTextArea中一組單詞的所有匹配以及一些上下文(N行,可能是用戶可配置的)。到同一個JTextArea的多個視口?

我已經有用於突出顯示匹配,所以我知道他們的偏移,因此可以確定他們的界限。我知道文本的行高,因此我可以確定要繪製的上下文區域的邊界。

但是有沒有像JViewport這樣的類只能繪製底層組件的多個視圖?由於JViewport是普通的Swing組件,只要將相同的文本區域放在另一個視口下,它就會從第一個視口分離。

編輯:其實事實證明,我似乎無法確定上下文領域的邊界爲線對偏移映射的JTextArea給了我不指望換行。

回答

2

這裏的問題是JViewport是一個普通的容器,並將其視圖組件視爲一個子組件(並且每個組件只能是一個容器中的子組件)。這是非常合理的,因爲總是隻有一個組件可以有焦點和類似的東西。

我不知道任何JViewport類的類可以做你想做的事情(繪製一個組件的視圖,而不是它的父級),但在你的情況下,你可以通過使用兩個JTextAreas共享相同的文檔。我想你只需要同步插入符號(如果願意的話)。

+0

我試圖寫這樣一個視口,它保持視圖矩形到文本矩形和背面的映射。這呈現正確,但現在當然事件將無法正常工作。因此,看起來JTextArea必須存在於組件層次結構中,但不知何故,我需要對它進行不同的轉換。 – Trejkaz

0

沒有任何東西像你描述的那樣存在。事實上,它聽起來像你想要自定義JTextArea的顯示。在這種情況下,您可以重寫和更改JTextArea繪製自己的方式。無論是在頂部繪畫還是完全改變它。

+0

它與JTextArea繪製自己的方式有很大的不同,因爲JTextArea繪製了所有的文本,但是我的組件只繪製了對它們有突出顯示的部分。目前我正在與此戰鬥,並可以正確繪製它,但當然鼠標輸入是下一個問題。 – Trejkaz

+0

不確定你在做什麼,但是你可以讓JTextArea繪製所有東西,並且你可以繪製突出顯示的部分或JTextArea繪製的區域,而不是其他的方式。 – jzd

0

在圖像中繪製您的JTextArea並使用圖像的必要片段。將圖像的邊界保留在原始JTextArea中,以便單擊可以計算的圖像以單擊JTextArea以獲取適當的位置。

相關問題