Java JScrollPane:闪烁(光标)被边框覆盖

Java JScrollPane:闪烁(光标)被边框覆盖,java,swing,jscrollpane,Java,Swing,Jscrollpane,我正在开发自己的小文本编辑器。可以在JScrollPane中编辑文件,现在如果一行文本比窗口长,可以按原样向右滚动。但是当闪烁灯(或者不管它叫什么)在线路的最末端时,它就不可见了,因为它似乎被边界所覆盖 //the JTextArea is inside the JScrollPane of course Border scrollPaneBorder = new LineBorder(interfaceColor, 8, true); Border textAreaBorder = new L

我正在开发自己的小文本编辑器。可以在JScrollPane中编辑文件,现在如果一行文本比窗口长,可以按原样向右滚动。但是当闪烁灯(或者不管它叫什么)在线路的最末端时,它就不可见了,因为它似乎被边界所覆盖

//the JTextArea is inside the JScrollPane of course
Border scrollPaneBorder = new LineBorder(interfaceColor, 8, true);
Border textAreaBorder = new LineBorder(backgroundColor, 4, true);   
将两个边框都设置为0不会改变任何内容。有人有办法解决这个问题吗

在我看来,最优雅的解决方案是Notepad++。在那里,当你靠近边界时,它会在文本和边界之间留出一些空间。但我不知道这在java中是如何实现的

无论是什么解决方案,谢谢大家的帮助。

来自:

设置文本组件边框与其文本之间的边距空间。文本组件的默认
边框
对象将使用此值创建适当的边距。但是,如果在文本组件上设置了非默认边框,则
border
对象负责创建适当的边距空间(否则此属性将被有效忽略)

如果没有边距,Swing的文本组件会将光标向上移动到绘制的
边框所覆盖的位置,这有点奇怪,但它解释了为什么在设置自定义
边框时会出现问题,而不是使用默认边框,因为边距属性的默认值为非零

您可以创建一个自定义边框来读取margin属性并实现该大小的未绘制内部区域,或者,如果您不需要对margin属性的不同值的支持,您可以将边框与空边框组合以获得类似的效果(硬编码的边距空间):


发帖寻求帮助。我不确定我是否理解你所说的记事本++功能。在我看来,当你调整尺寸时,它只是有一个最小宽度。好吧,一旦你靠近边框,它就会在中间设置一些空间,但它不会移动窗口的边框,如果你是这个意思的话。谢谢你的帮助;)我没想到空订单,好主意。
Border textAreaBorder=BorderFactory.createCompoundBorder(
  BorderFactory.createLineBorder(backgroundColor, 4, true),
  BorderFactory.createEmptyBorder(2, 2, 2, 2)
);