文本編輯器中的關鍵數據結構是保存文本的關鍵數據結構。 This article對於文本編輯器可以選擇的結構類型有很好的總結。文章很舊,但今天仍然很有意義。
對於某些類型的操作,非常簡單的數據結構(如字符數組)往往太慢,就像在最初已經很長的文檔中插入一個字符一樣,因爲您最終會移動或複製大量的數據。大多數數據結構通過巧妙地將文檔分成塊來減少或限制被移動的數據量。我鏈接的文章有詳細信息。
使用某些更高級的數據結構的另一個原因是爲了更簡單地實現撤銷和重做等功能。一些數據結構可以很容易地保留被刪除的文本,這樣通過改變幾個指針或偏移量就可以輕鬆地將文檔恢復到以前的狀態。
其他數據結構可以幫助格式化文本,但通常這些文件編輯器(比如Word)比文本編輯器更適合。
JTextArea(和其他平臺上的可比較功能)本質上是文本編輯器,它們可能使用我鏈接到的文章中的某個數據結構。
如果你想寫在該級別文本編輯器,而不是使用現有的,你需要實現多個類型的功能:
- 加載該文件中的文本數據謝靈運和再次保存它。
- 響應修改文本的按鍵。例如,如果用戶鍵入字母鍵,則需要將該字母插入當前位置的文本數據結構中。如果他們按退格鍵,則需要刪除一個字符。等
- 在屏幕上顯示文檔。您將不斷必須將窗口座標映射到文本序列中的一個點,反之亦然。例如,如果用戶單擊鼠標,則需要將點擊的(x,y)座標轉換爲文本序列中的某個位置。根據您的佈局的複雜程度,您可能可以實時計算此值,但通常有助於創建額外的數據結構,以充當文本序列與窗口座標之間的映射。當然,如果文本更改或窗口大小調整,則必須更新該數據結構。
鑑於'JTextArea'上的位僅僅是一個例子,我不確定爲Java和Swing添加標籤是否合適。問題不在於那些。添加它們會混淆(或至少淡化)問題的重點。如果最初有這些標籤,我就不太可能讀過它。 – 2015-07-10 19:59:11