JScrollPane:边框覆盖了Blinker(光标)

时间:2015-01-13 14:10:10

标签: java swing jscrollpane

我正在使用自己的小文本编辑器。文件可以在JScrollPane中编辑,现在如果一行文本比窗口长,你可以按原样滚动到右边。但是当Blinker(或其所谓的任何东西)位于该行的最末端时,它不可见,因为它似乎被边界所覆盖。

//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中实现这一点。

无论什么解决方案,感谢帮助人员。

1 个答案:

答案 0 :(得分:2)

来自documentation of setMargin

  

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

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

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

Border