2010-06-20 75 views
0

编辑 - 简而言之,我在寻找的是向JEditorPane添加左边距的可靠方法(请参阅我遇到的问题,喜欢)。为JEditorPane文本框创建左边距


我想在JEditorPane中设置一些文本的样式,并且相当成功。我面临的唯一问题是,似乎不可能创造一个保证金。

基本上,我扩展了PlainView并重写了drawUnselectedText方法。现在,我只是将文本着色为红色并更改字体。我也重写了drawSelectedText方法来为文本着色。

无论光标位置等是否一致,无论文本是否被选中 - 只要我没有设置边距

但是,如果我为JEditorPane设置了边距,则JEditorPane只能在大多数时间使用。当从任意行的最左侧字符处开始选择时,唯一不起作用的情况是。在这种情况下,边距将被忽略,所选文本将出现在JEditorPane的最左侧。

我知道这是一个非常特殊的问题,大多数其他人可能没有经历过,我在网上没有发现任何关于此的信息,但我希望这里有人会有解决方案。

任何想法?即使任何可以让我使用其他方法来设定保证金的事情都会非常有帮助。

+0

如果你没有扩展'PlainView',它的行为是这样吗? – akf 2010-06-20 02:04:38

+0

不,也不是这样,如果我不重写drawUnselectedText方法,所以我认为这是我的问题的根源。 – Cam 2010-06-20 02:30:54

回答

0

我放弃寻找这个问题的优雅解决方案。基本上我创建了一个hack,测试是否存在bug发生的地方(从左边选择等),如果他们这样做,则调整文本的渲染。

我真的不喜欢黑客,因为它们通常对可移植性和可维护性不利,但这似乎起作用,所以我想我会将它抽象出来,并希望它不会破坏任何东西。

无论如何,它的工作是关键。我没有收到任何答案,但我敢肯定有一些人至少试图想一些东西,所以谢谢:)

顺便说一句 - 如果有人能想出一个优雅的解决方案,我仍然会接受而不是我自己的答案(我不能两天)。


编辑:这是我喜欢Java的原因之一。黑客引发可移植性问题的可能性较小 - 尽管这与渲染有关(它通过与Graphics对象交互而起作用),但它仍然适用于任何操作系统。