2013-08-20 73 views
1

我創建了一個使用JTextPane的Swing界面。 JTextPane使用自定義顏色突出顯示:JTextPane中重疊的高亮文本顏色

textPane.getHighlighter().addHighlight(startPos, endPos, highlightPainter); 

用戶還可以用普通方式用光標高亮顯示文本。

我的問題是,我無法弄清楚突出顯示的熒光筆對象和光標選擇的文字的顏色第三,不同的顏色。突出顯示對象的突出顯示總是優先。

我嘗試使用CaretListener對象,但它只在用戶在手動突出顯示後釋放鼠標時觸發事件。我需要重疊來呈現,而用戶正在用光標調整高亮區域。

我甚至會對光標突出顯示優先於熒光筆對象的突出顯示而感到滿意,但唯一的重疊顏色是一個更好的功能。

以下問題是我相似:

How to use LayeredHighlighter - One highlight on top of another

,但唯一的答案只是鏈接到一個覆蓋方法,玻璃面板。我更喜歡的JTextPane或文檔級的解決方案,但是,因爲所選文本的價值是通過

textPane.getSelectionStart(); 

textPane.getSelectionEnd(); 
+0

我不認爲'CaretListener'就夠了,它只會告訴「事後」的亮點。您可以直接將'ChangeListener'附加到'Caret'。看看[這個例子](http://stackoverflow.com/questions/18199593/in-java-swing-can-i-receive-caret-events-in-real-time/18200409#18200409)一些更多的細節 – MadProgrammer

回答

0

我構建了非選擇,自定義突出顯示顏色與透明度的阿爾法值(默認值是完全不透明):

Color myColor = new Color(rValFloat, gValFloat, bValFloat, alpha); 

這不會給我的重疊區域的顏色的完全控制權,因爲高亮是我也可以改變光標的選擇顏色:

textPane.setSelectionColor(mySelectionColor); 

這是足夠控制我的目的。

6

重要的我甚是開心,其中光標突出優先於熒光筆對象的highlightings代替

JTextPane textPane = new JTextPane(...); 
DefaultHighlighter highlighter = (DefaultHighlighter)textPane.getHighlighter(); 
highlighter.setDrawsLayeredHighlights(false); 
+0

+1學到了新的東西。投入我的想法地獄:D – MadProgrammer

+0

@MadProgrammer,我不得不承認我不太瞭解這個屬性。我認爲默認值應該是「false」,因爲看到選定的文本是有意義的。它還改變了手動添加熒光筆時突出顯示的方式。現在,如果手動高亮顯示兩行文字,即使文字未走到最後,整行也會突出顯示。當使用「true」時,只有文本被突出顯示。 – camickr