如何限制JTextArea最大行数和列数?

2023-11-27

我在 JScrollPane 中使用 JTextArea

我想限制可能的最大行数和每行的最大字符数。

我需要该字符串与屏幕上的完全相同,每行将以 '\n' 结尾(如果后面还有另一行),并且用户将能够在每行中仅插入 X 行和 Y 字符。

我试图限制行数,但由于换行,我不知道到底有多少行,换行是在屏幕上可视地开始新行(因为 JTextArea 的宽度),但在字符串中该组件实际上是同一行,没有 '\n' 来指示新行。我不知道如何在打字时限制每行的最大字符数。

有 2 个阶段:

  1. 字符串的键入 - 请注意用户将无法键入超过 X 行和每行中的 Y 个字符。 (即使换行仅在视觉上或用户键入“/n”)
  2. 将字符串插入数据库 - 单击“确定”后,将字符串转换为每行都以“/n”结尾,即使用户没有键入它并且该行仅在视觉上换行。

如果我计算行中的字符并在行末尾插入“/n”,那么几乎不会出现问题,这就是为什么我决定分两个阶段进行。在第一阶段,当用户正在打字时,我宁愿只在视觉上限制它并强制换行或类似的东西。仅在第二阶段,当我保存字符串时,即使用户没有在行尾键入它,我也会添加“/n”!

有人有想法吗?


我知道我将不得不使用 DocumentFilter 或 StyledDocument。

以下是仅将行数限制为 3 的示例代码:(但不将行中的字符限制为 19)

private JTextArea textArea ;
textArea  = new JTextArea(3,19);
textArea  .setLineWrap(true);
textArea .setDocument(new LimitedStyledDocument(3));
JScrollPane scrollPane  = new JScrollPane(textArea

public class LimitedStyledDocument extends DefaultStyledDocument

    /** Field maxCharacters */
    int maxLines;

    public LimitedStyledDocument(int maxLines) {
        maxCharacters = maxLines;
    }

public void insertString(int offs, String str, AttributeSet attribute) throws BadLocationException {
    Element root = this.getDefaultRootElement();
    int lineCount = getLineCount(str);

    if (lineCount + root.getElementCount() <= maxLines){
        super.insertString(offs, str, attribute);
    }
    else {
        Toolkit.getDefaultToolkit().beep();
    }
}

 /**
 * get Line Count
 * 
 * @param str
 * @return the count of '\n' in the String
 */
private int getLineCount(String str){
    String tempStr = new String(str);
    int index;
    int lineCount = 0;

    while (tempStr.length() > 0){
        index = tempStr.indexOf("\n");
        if(index != -1){
        lineCount++;
            tempStr = tempStr.substring(index+1);
        }
    else{
        break;
        }
    }
    return lineCount;
   }
}

以下对我有用:

public class LimitedLinesDocument extends DefaultStyledDocument 
{    
  private static final String EOL = "\n";

  private int maxLines;

  public LimitedLinesDocument(int maxLines) 
  {    
    this.maxLines = maxLines;
  }

  public void insertString(int offs, String str, AttributeSet attribute) throws BadLocationException 
  {        
    if (!EOL.equals(str) || StringUtils.occurs(getText(0, getLength()), EOL) < maxLines - 1) 
    {    
      super.insertString(offs, str, attribute);
    }
  }
}

哪里的StringUtils.occurs方法如下:

public static int occurs(String str, String subStr) 
{    
  int occurrences = 0;
  int fromIndex = 0;

  while (fromIndex > -1) 
  {    
    fromIndex = str.indexOf(subStr, occurrences == 0 ? fromIndex : fromIndex + subStr.length());
    if (fromIndex > -1) 
    {    
      occurrences++;
    }
  }

  return occurrences;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制JTextArea最大行数和列数? 的相关文章

  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的

随机推荐

  • 验证 PowerShell PSCredential

    假设我有一个PSCrendential我使用 PowerShell 创建的对象Get Credential 如何根据 Active Directory 验证输入 现在我找到了这种方法 但我觉得它有点难看 void System Reflec
  • *ngIf 和 [hidden] 有什么区别?

    假设我对照 和 表达式进行检查 那么这两个不是相同的吗 div val div div val div 它们之间实际上存在性能差异 ngIf如果表达式为 false 将注释掉数据 这样 数据甚至不会加载 从而导致 HTML 加载速度更快 h
  • Spark:如何在数据帧上执行 dropDuplicates,同时保留最高时间戳行[重复]

    这个问题在这里已经有答案了 我有一个用例 我需要删除数据帧的重复行 在这种情况下 重复意味着它们具有相同的 id 字段 同时保留具有最高 时间戳 unix 时间戳 字段的行 我找到了 drop duplicate 方法 我正在使用 pysp
  • 将数据框列名称从字符串格式更改为日期时间

    我有一个数据框 其中列的名称是字符串形式的日期 年月 如何将这些名称转换为日期时间格式 我尝试这样做 new cols pd to datetime df columns df df new cols 但我收到错误 KeyError Dat
  • 根据 MSVC++ 中的 unicode 设置自动在 std::string 和 std::wstring 之间更改?

    我正在编写一个 DLL 希望能够在 MSVC 2010 中的 unicode 和多字节设置之间切换 例如 我使用 T string and LPCTSTR and WIN32 FIND DATA而不是 W 和 A 版本等 现在我想要 std
  • 捕获异步操作的异常

    我在这里阅读有关异步的更多信息 http msdn microsoft com en us library hh873173 v vs 110 aspx 看看这个例子 Task
  • 非凸多边形内最大的圆

    如何找到可以容纳在凹多边形内的最大圆 只要能够实时处理具有约 50 个顶点的多边形 暴力算法就可以 解决这个问题的关键是首先进行观察 适合任意多边形的最大圆的中心是以下点 多边形内部 和 距多边形边缘上任意点最远 为什么 因为圆的边缘上的每
  • F# 中的第一个或默认值

    如何在 F 中编写 FirstOrDefault Linq 查询 我可以在 F 中完全使用 linq to sql 吗 请注意 F 中更惯用的方法可能是使用类似于Seq tryFind而不是使用 LINQ 运算符 尽管它不是替代品 因为它返
  • mongodb 转储多个集合或排除集合版本 2.6

    如何转储多个集合或排除 mongodump 上的集合 mongodb是2 6版本 我现在就是这样做的 mongodump collection map accounts clicks out dumps 您可以使用 排除集合从 MongoD
  • 如何在Python中使用点表示法表示字典?

    我对 python 很陌生 我希望我能做到 访问 a 值的表示法dict 可以说我有test像这样 gt gt gt test dict gt gt gt test name value gt gt gt print test name v
  • 如何使用 faces-redirect 进入 JSF 2.2 流程

    我有一个基本的流程示例 src main webapp index xhtml flow1 flow1 flow xml flow1 xhtml index xhtml 有一个简单的形式 使用参数进入流程
  • 如何修复“客户端身份验证方案‘匿名’禁止 HTTP 请求”

    我在实现与 WCF 服务通信的客户端时遇到一些问题 它是由另一家公司托管的 WCF 因此我无权访问其代码 我使用 Visual Studio 中的连接服务提供程序工具生成客户端代码 以便我可以发出请求 并且一切都在我的本地计算机上正常运行
  • 为什么 npm 将本地包安装在我的主目录中?

    Node js 新手 Windows 10 我npm install ed 一些软件包 没有 g 而在没有的目录中package json npm 将包放入C Users MyName node modules 现在我看到一些奇怪的行为 当
  • 在类中使用 es6 箭头函数[重复]

    这个问题在这里已经有答案了 当我改变一个函数时draw to draw gt 我收到类似 Uncaught SyntaxError Unexpected token 的错误 可能是什么原因 首先 你可能不应该这样做 为什么 嗯 因为箭头函数
  • 将源代码管理中的更改提交到多个分支的实用方法

    使用源代码控制时的常见场景是拥有开发分支和版本化发布分支 我们使用 CVS 以 HEAD 作为开发分支 并命名一个分支 例如 release 6 2 表示产品的当前版本 新功能的开发仅进入开发分支 但错误修复有时必须同时检查到开发分支和当前
  • 有没有办法重定向到另一个 Action 类而不使用 struts.xml

    我在 Struts 应用程序中创建了许多类 我没有检查任何课程是否登录状态 相反 我扩展了一个基本动作类 现在我想在我的基本操作中创建一个预处理程序来检查登录情况并在未登录时进行重定向 我想要这样的东西 public BaseAction
  • 何时调用layoutSubviews方法?

    我正在经历教程其中提到了以下方法 void layoutSubviews 位于CustomerCell m 在应用程序执行期间何时调用此方法 是自动调用的吗 我没有看到任何回调 你会找到你的答案here 编辑 直接从博客复制 init 不会
  • “请求的快照版本太旧。” Firestore 中的错误

    在使用 Firebase 的 Swift 客户端时 从 2 月 9 日开始 我开始看到错误消息 请求的快照版本太旧 在addSnapshotListener的回调中 这个错误是什么意思 我该如何修复它 Thanks None
  • Passport JS“发送后无法设置标头”

    当我使用passport JS成功登录时出现此错误 登录后尝试重定向到主页 执行此操作的代码 app post login passport authenticate local failureRedirect login function
  • 如何限制JTextArea最大行数和列数?

    我在 JScrollPane 中使用 JTextArea 我想限制可能的最大行数和每行的最大字符数 我需要该字符串与屏幕上的完全相同 每行将以 n 结尾 如果后面还有另一行 并且用户将能够在每行中仅插入 X 行和 Y 字符 我试图限制行数