Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jtextcomponent中匹配文本_Java_Swing_Editor_Jtextcomponent - Fatal编程技术网

Java 如何在jtextcomponent中匹配文本

Java 如何在jtextcomponent中匹配文本,java,swing,editor,jtextcomponent,Java,Swing,Editor,Jtextcomponent,我正在尝试使用jtextarea开发一个没有滚动条的编辑器,因此如果文本太长而无法放入jtextarea,则应将其拆分为较小的子字符串,这些子字符串可以在jtextarea中编辑,而不显示垂直滚动条,因为使用setLineWrap和setWrapStyleWord很容易摆脱水平滚动条。我曾尝试使用垂直滚动条AdjustmentListener来侦听其更改,但它不起作用,因为jtextarea append和setText方法在业务逻辑结束时被激活,所以我尝试使用多线程和SwingWorker来调

我正在尝试使用jtextarea开发一个没有滚动条的编辑器,因此如果文本太长而无法放入jtextarea,则应将其拆分为较小的子字符串,这些子字符串可以在jtextarea中编辑,而不显示垂直滚动条,因为使用setLineWrap和setWrapStyleWord很容易摆脱水平滚动条。我曾尝试使用垂直滚动条AdjustmentListener来侦听其更改,但它不起作用,因为jtextarea append和setText方法在业务逻辑结束时被激活,所以我尝试使用多线程和SwingWorker来调用这些方法,但也不起作用。我还尝试调用repait、revalidate和update方法,但毫无希望。请帮我通过这个问题,并提前感谢

我正在尝试使用jtextarea开发一个没有滚动条的编辑器,因此如果文本太长而无法放入jtextarea,则应将其拆分为较小的子字符串,这些子字符串可以在jtextarea中编辑,而不显示垂直滚动条,因为使用setLineWrap和setWrapStyleWord很容易摆脱水平滚动条

我不确定我是否完全理解这一点。也许你可以进一步解释?为什么不将JTextarea放在JScrollPane中?如果所包含的文本大于JTextArea可以显示的文本,您希望的行为是什么

我曾尝试使用垂直滚动条AdjustmentListener来侦听其更改,但它不起作用,因为jtextarea append和setText方法在业务逻辑结束时被激活,所以我尝试使用多线程和SwingWorker来调用这些方法,但也不起作用。我还尝试调用repait、revalidate和update方法,但毫无希望


如果您想在提交到文本组件之前捕获输入的文本,请考虑将文档过滤器设置到JTestTaReA的相关文档(PLAUDICONPART)。

< P>作为Eels已经建议的气垫船,您必须查看<代码>文档< /代码>,
DocumentFilter
和/或
DocumentListener
接口

通过调整这些参数,您可以完全控制当有人想要追加文本时显示的文本。例如,您可以在添加新文本之前/之后删除文本的第一部分,从而限制文档中的行数/字符数


在本节中,包含这样一个示例,其中类是您正在查找的类(不是JDK的一部分,而是Swing教程代码的一部分)。正如该示例代码中的注释所建议的那样,在添加新文本时删除文档的第一部分是一种选择,这会使内容过长,但我将其留给您,因为它被标记为家庭作业。

谢谢气垫船和罗宾。我明白了,您的答案让我找到了正确的方法,我通过使用JTextArea.modelToView()在“CoreSwing:advanced programming”一书中找到了准确的答案将JTextArea文档长度作为参数传递此方法返回一个矩形对象,其坐标表示最终字符坐标,然后将这些坐标与JTextArea的下角进行比较,以查看最终字符是否到达此底部

非常感谢装满鳗鱼的气垫船的回复,亲爱的,我不想看到JScrollPane,因为这是作业的先决条件;为了明确我的问题,如果我需要设置或附加到JTextArea的字符串太长,并且会导致显示垂直滚动条,则必须将该字符串划分为较短的子字符串。可以在不显示垂直滚动条的情况下将其中的每一个字符串设置到JTextArea,并在JTextArea中连续显示它们,以响应一个事件,例如按下按钮,那么DocumentFilter是否可以帮助我解决这个问题???thanksHow是要在JTextArea中显示的字符串?用户是否键入它?它来自文件吗?Socket?我通过inputstream从xhtml文件中获取字符串,并在解析后将其追加或设置到jTextArea中,正如我向Robin先生提到的,这必须考虑字体大小的变化和窗口大小的调整,因此,如果我能够在不滚动的情况下获得AbstractDocument的最大字符数,问题将得到解决。感谢您回复Robin,但DocumentSizeFilter需要手动指定最大字符数,因此如果调整窗口大小或更改字体大小,滚动条将再次出现,我需要获得在不显示滚动条的情况下允许的最大显示字符数,所有问题将消失,非常感谢,这是一个文档阅读器,作为学期的项目,而不是家庭作业;)感谢您,罗比尼建议您查看
JTextArea
getRows
getColumns
,…)上提供的getter。我很肯定你能想出一些办法来避免硬编码的最大字符数,并支持动态大小的文本区域