2010-07-04 34 views
2

我在嘗試並且無法理解如何使用Java的文本編輯器組件在插入時對文本着色。我不想或不需要全功能語法突出顯示庫。在JTextField/JTextPane中創建不同的顏色/?

基本上,我有一個JTextField(或其他JText ...組件)和一個單詞列表。我希望字段中出現在字段中的任何單詞是紅色的,其餘單詞是綠色的。例如,如果列表中有「火災」,「fir」將顯示爲綠色,「fire」將顯示爲紅色。

我試過使用JTextPane和DefaultStyledDocument,使用KeyListener來檢查文檔中的文本並使用AbstractStyledDocument.replace用具有正確屬性的版本替換現有單詞。這沒有做任何事情。我究竟做錯了什麼?

回答

1

JTextPaneJTextField都不能呈現格式化文本,即具有多種格式的文本。對於像寫字板或HTML中那樣的文本編輯器功能,要使用的組件是JEditorPane或其後代JTextPane

你可以做的最簡單的事情是將JEditorPane的ContentType設置爲「text/html」,並簡單地將其文本設置爲包含HTML的字符串。 Java結構化文本組件對於HTML非常有效;您可以顯示錶格和/或DIV,並且支持大部分CSS2。最簡單的做你的款式,但你甚至可以做外部風格href s。

如果您想以編程方式獲得幻想,您可以訪問DocumentModel並根據各自具有自己格式的文本跨度創建文本。 DocumentModel基本上像一個可編程的文本編輯器。


編輯:重讀你的問題,我看到我的答案並不完全解決這一問題。既然你想要多彩文本JEditorPane是你唯一的選擇,但不僅僅是通過HTML或其他方式在預先着色的文本中滾動,您必須在您的文檔模型上放置一個偵聽器來捕捉鍵入時引入的更改;並且在每次文檔更改之後,您都需要檢查文本(同樣來自文檔模型)以查找應該或不應該突出顯示的文本,並且您需要將格式應用於某些文本運行。

細節中有惡魔,但這應該讓你開始。

+0

難點在於我需要在用戶鍵入文本時隨時進行這種着色。所以我不太需要創建文本,因爲我一直在進行着色。 – Zarkonnen 2010-07-04 19:00:46

+0

從我的編輯(水平線以南)的東西應該可以幫到你。聆聽模型後,您可以按照自己的喜好對任何新的/已更改的文本進行着色處理。 – 2010-07-04 19:07:32