2011-10-04 62 views
4

所以我有一个JTextArea用户输入,然后当他们点击一个按钮,它写入到一个文本文件,我都setLineWrapsetWrapStyleWord设置为trueJTextArea写作多的JTextArea为txt文件

我想写在文本文件中它出现在文本框中的确切方式。

我试图做的String持有其作品,但只有当用户实际点击返回键打字输入的时候,但如果用户只是不断打字和命中结束时JTextArea内容的replace("\n", System.getProperty("line.separator"))一条线,所以它跳转到下面的线,replace不起作用。

我一直在使用一个StringBuffer也试过,我计算了多少个字符将适合在行,然后跑在每行的最后一个for loopinserting新行,以便在第一线我将在90位置添加它,第2行180,第三270等。但我很快就意识到,在所有情况下都不起作用,因为有些角色比其他角色小,例如,您可以在一条线上安装更多的j,而不是p

我想要做的就是想出一个方法来计算一条线的末端,所以我知道insert新线的位置,但我也接受其他建议。谢谢。如果你认为这将有助于看到我的一些代码只是问。

更新 无需实现代码来做到这一点,我跟谁将会是非常使用该程序的唯一的人的一个人,他是罚款与普通记事本格式,我没有意识到这一点,但只要因为他已经在他的记事本格式设置wordWrap检查,那么这将消除他不得不使用侧滚动以读取整个行,感谢您的输入

回答

5

使用Utilities

public static final int getRowStart(JTextComponent c, int offs) 
public static final int getRowEnd(JTextComponent c, int offs) 

你通过偏移和开始和结束

+0

尽管如此,您仍然需要遍历文本区域的字符串,以查找所有中断的位置,对吗? (虽然我不认为在这种情况下这是一个合适的事情,但无论如何,这将是一个方便的工具,返回一组开始/结束对。) –

1

我不明白如何,除了只计算字长使用字体指标并做文本区域已经做的事情。

虽然这背后的目的是什么?

+0

以及程序作为一个整体确实比这个多得多得到抵消该行,该JTextArea是只为一个场用户输入笔记,但我希望笔记在记事本文件中看起来很好格式化,因为我不喜欢在记事本中需要多长时间行,需要您在阅读整行之前滚动横向,Im希望用户可能会使他使用子弹或其他东西的笔记,所以它只会是用户点击返回前的一小段文字,但我不能确定那 – Beef

+1

@Beef记事本也是自动换行。问题是当你添加一些像换行符时,你*强制*你的宽度:如果他们*想*它在记事本中很长,它将被切断到你的文本字段的大小。国际海事组织,你最好存储原样,并让用户决定。 –