Java 在高级语言中,文本编辑器的数据结构在哪里?

Java 在高级语言中,文本编辑器的数据结构在哪里?,java,swing,data-structures,textbox,text-editor,Java,Swing,Data Structures,Textbox,Text Editor,我读到文本编辑器中大量使用数据结构。但在我看来,如果我正在用高级语言编写一个简单的文本编辑器,那么me就不需要使用任何数据结构 例如,在Java中,我可以使用Swing的JTextArea和getText()方法将我拥有的字符串保存到文件中。基本上,我有一个没有数据结构的简单文本编辑器 我猜编辑的数据结构是在JTextArea本身中实现的。这是正确的吗?或者数据结构会变得更低;也就是说,操作系统在哪里接受来自键盘的数据到缓冲区?因此,有人能帮助我理解数据结构是在什么抽象层次上实现的吗?文本编辑器

我读到文本编辑器中大量使用数据结构。但在我看来,如果我正在用高级语言编写一个简单的文本编辑器,那么me就不需要使用任何数据结构

例如,在Java中,我可以使用Swing的
JTextArea
getText()
方法将我拥有的字符串保存到文件中。基本上,我有一个没有数据结构的简单文本编辑器


我猜编辑的数据结构是在
JTextArea
本身中实现的。这是正确的吗?或者数据结构会变得更低;也就是说,操作系统在哪里接受来自键盘的数据到缓冲区?因此,有人能帮助我理解数据结构是在什么抽象层次上实现的吗?

文本编辑器中的关键数据结构是保存文本的结构。对人们为文本编辑器选择的结构类型有一个很好的总结。这篇文章很老,但今天仍然很有意义

对于某些类型的操作来说,非常简单的数据结构(如字符数组)往往太慢,例如在已经很长的文档开头插入字符,因为最终会移动或复制大量数据。大多数数据结构通过巧妙地将文档划分为块来减少或限制移动的数据量。我链接的那篇文章有很多细节

使用一些更高级的数据结构的另一个原因是为了更简单地实现撤销和重做等功能。一些数据结构使保留删除的文本变得很容易,这样就可以通过更改几个指针或偏移量将文档恢复到以前的状态

附加的数据结构可以帮助格式化文本,但这些数据结构通常更适合文档编辑器(如Word)而不是文本编辑器

JTextArea(以及其他平台中的类似功能)本质上是文本编辑器,它们可能使用我链接到的文章中的一种数据结构

如果希望在该级别编写文本编辑器,而不是使用现有编辑器,则需要实现几种类型的功能:

  • 将文本从文件加载到数据结构并再次保存
  • 响应修改文本的按键。例如,如果用户键入字母键,则需要将该字母插入当前位置的文本数据结构中。如果他们按backspace键,则需要删除一个字符。等等
  • 在屏幕上显示文档。您必须不断地将窗口坐标映射到文本序列中的一个点,反之亦然。例如,如果用户单击鼠标,则需要将单击的(x,y)坐标转换为文本序列中的某个位置。根据您的布局的复杂程度,您可能能够动态地计算出这一点,但有一个额外的数据结构作为文本序列和窗口坐标之间的映射通常会有所帮助。当然,如果文本更改或窗口调整大小,则必须更新该数据结构

  • 非常感谢,但还有一件事。GUI端是如何实现的?您提到我必须绘制坐标图,但这是如何做到的,为此目的使用了哪些库?在命令行编辑器(如linux中的VIM)中,这种GUI映射是如何管理的?再一次,谢谢。你回答了我的问题,但这只会导致另一个问题!!Design Patterns book()介绍了一个文档编辑器的示例,其中包括表示屏幕到文本映射的模式(和数据结构)的思想。鉴于
    JTextArea
    上的位只是一个示例,我不确定是否适合为Java和Swing添加标记。问题不在于这些。添加它们会混淆(或至少淡化)问题的重点。如果它最初有那些标签,我就不太可能读到它了。