JTextArea Shift + Enter 换行

2023-12-27

我已向 JTextArea 字段添加了一个按键侦听器,但它的行为并不符合我的预期。

inputTextArea.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent k) {
  //If the return button is hit, only set to a new line if shift is also down.
  if(k.getKeyChar() == KeyEvent.VK_ENTER) {
   if(k.isShiftDown()) {
    inputTextArea.append(" \n");
   } else {
    //Send The Message...
    boolean cleanTextField = false;
    try {
     sendMessage(inputTextArea.getText());
     cleanTextField = true;
     msgScrollPane.setAutoscrolls(true);

     JScrollBar vbar = msgScrollPane.getVerticalScrollBar();
     if ((vbar.getValue() + vbar.getVisibleAmount()) == vbar.getMaximum()) {
      msgPane.setCaretPosition(msgDoc.getLength());
     }
    } catch (Exception ex) {
     ex.printStackTrace();
     cleanTextField = false;
    } finally {
     if(cleanTextField) {
      inputTextArea.setText("");
     }
    }
   }
  }
 }
});

我要这个: - 如果按下返回按钮并且按下 Shift 键:添加新行。 - 如果按下返回按钮且未按下 Shift 按钮:不换行,但提交。

现在它的行为是这样的: - 如果我按下返回按钮并且 Shift 已按下:则不会添加任何行。什么都没发生。 - 如果我点击返回按钮并且 Shift 没有按下:已提交,但如果我再次开始输入,它将从新行开始。

有人知道如何做我想做的事吗?

EDIT:

我尝试了一些其他代码来检测 Shift 按钮是否按下:

                    if((k.getModifiersEx() == KeyEvent.SHIFT_DOWN_MASK) || 
                            (k.getModifiers() == KeyEvent.SHIFT_DOWN_MASK)) {

这不太有效


您可以使用InputMap and ActionMap of the JTextArea将击键映射到操作:

private static final String TEXT_SUBMIT = "text-submit";
private static final String INSERT_BREAK = "insert-break";
...
private void initialize() {
    InputMap input = inputTextArea.getInputMap();
    KeyStroke enter = KeyStroke.getKeyStroke("ENTER");
    KeyStroke shiftEnter = KeyStroke.getKeyStroke("shift ENTER");
    input.put(shiftEnter, INSERT_BREAK);  // input.get(enter)) = "insert-break"
    input.put(enter, TEXT_SUBMIT);

    ActionMap actions = inputTextArea.getActionMap();
    actions.put(TEXT_SUBMIT, new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            submitText();
        }
    });
}
...
private void submitText() {
    // TODO
}  

原来的动作为ENTER- “插入中断” - 用于shift ENTER.

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

JTextArea Shift + Enter 换行 的相关文章

  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • 如何使用retrofit2动态设置超时?

    public class Router private static Retrofit retrofit null public Retrofit getRetrofit if retrofit null OkHttpClient clie
  • jvm中本机代码如何转换为机器代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过一些文章说 jvm将字节码转换为机器码 jvm将字节码转换为本机代码 jvm 将字节码转换为系统调用 系统调用又由操作系统与硬件
  • 如何实现具有LinkedHashMap类似功能的ConcurrentHashMap?

    我用过LinkedHashMap with accessOrdertrue 并同时允许最多 500 个条目作为数据的 LRU 缓存 但由于可扩展性问题 我想转向一些线程安全的替代方案 ConcurrentHashMap在这方面似乎不错 但缺
  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • Java“空白最终字段可能尚未初始化”方法中抛出异常

    我有一些代码 例如 final int var1 if isSomethingTrue var1 123 else throwErrorMethod int var2 var1 throwErrorMethod 的定义如下 private
  • AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

    我有以下代码 它可以完成我想要绘制一个上面有一些棋子的棋盘的 第一部分 Image pieceImage getImage currentPiece int pieceHeight pieceImage getHeight null dou
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 按文件名过滤 eclipse 中的警告

    我们使用 Eclipse 进行 Java 开发 并使用 Maven 将 JSP 编译成 servlet 以便在嵌入式 Jetty 实例中使用 这意味着要从 Eclipse 运行该项目 我必须包含 target jsp source 作为源文
  • SwingWorker 在另一个 SwingWorker 的 did 方法中

    首先 我需要通知您 我正在尽最大努力学习如何用 Java 编写代码 虽然有点困难 但我相信我能做到 我过去提交了几个有关 SwingWorkers 等的问题 每一个我都以为我已经做到了 但后来发现我仍然需要学习 希望这一次不是那样的一次 话
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • Elasticsearch - EdgeNgram + 突出显示 + term_vector = 不好的突出显示

    当我使用带有edgengram min 3 max 7 front term vector with positions offsets的分析器时 文档包含文本 CouchDB 当我搜索 couc 时 我的亮点是 cpu 而不是 couc
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • 在 REST Web 服务中接受逗号分隔值

    我正在尝试接收 REST URI 中以逗号分隔值形式的字符串列表 示例 http localhost 8080 com vogella jersey first rest todo test 1 abc test 其中 abc 和 test
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • 使用正则表达式匹配阿拉伯文文本

    我试图使用正则表达式仅匹配阿拉伯语文本 但出现异常 这是我的代码 txt matches P Arabic 这是例外情况 线程 main 中的异常 java util regex PatternSyntaxException 索引 9 附近

随机推荐

  • 建议:c++ 中的异步、可移植文件 io

    我正在寻找一个 C 异步 io 库 它应该与 unix 和 windows 系统兼容 有哪些好的图书馆 对于一个同时支持这两个系统的库来说 这要求是否太高了 人们对此事有何经验 Use 增强 asio http www boost org
  • Eclipse Java 错误:无法启动此选择并且最近没有启动

    我在互联网上到处查看并尝试了论坛所说的所有操作 但没有任何效果 这个错误不断出现 我尝试运行我的java项目 不适用于android 即使下拉运行按钮也不起作用 因为它说 不适用 Eclipse 需要查看项目源文件之一中的 main 方法
  • PHP - 保护代码[重复]

    这个问题在这里已经有答案了 可能的重复 如何保护您的软件代码 https stackoverflow com questions 2368064 how to protect your software code 保护我的 PHP 应用程序
  • 正则表达式替换第二次出现的字符

    我有一些以下格式的数据 MM SS 嗯 where MM is minutes ss is seconds and mmm is 3 digit milliseconds like 05 23 236 我试图用点替换第二次出现的冒号 05
  • $this是什么意思

    我见过一些脚本包含 this在具有 OOP 的 PHP 脚本中 我从来不知道它的含义 就像 this gt refresh 也许向我解释一下什么 this指的是 但我确实知道你不能将它用作动态变量 例如 this is a variable
  • 如何像 ps -e 一样显示进程

    Hello 我想制作一个简单的 C 程序 就像 ps i 一样工作 唯一应显示的列是 PID 和 CMD 那是我的代码 include
  • 常见的 SIMD 技术

    在哪里可以找到有关常见 SIMD 技巧的信息 我有一个指令集 并且知道如何编写不复杂的 SIMD 代码 但我知道 SIMD 现在更加强大 它可以容纳复杂的条件无分支代码 例如 ARMv6 以下指令序列将 Rd 的每个字节设置为 Ra 和 R
  • Docker 退出,状态码 139

    我有一个 Net Core 应用程序 它可以在 Docker 映像上运行 我在命令行中输入 docker run d net bridge it name testapp v var test var test microsoft aspn
  • Selenium Webdriver + python - 鼠标悬停后无法隐藏工具提示

    我正在使用 Selenium WebDriver 和 Firefox 在我的网页上测试工具提示 我试图将鼠标悬停在附加工具提示的元素上 测试工具提示是否显示 然后将鼠标悬停在另一个元素上并测试其各自的工具提示 element to clic
  • Angularjs $http 在 GET 上期望 JSON 结果时出现“XML 解析错误:找不到元素位置”错误

    当我提交一个角js httpGET 调用我收到 XML 解析错误 http调用代码片段是 http method GET url myapp api items itemId 错误是 XML Parsing Error no element
  • PySpark:如何根据多个条件附加其他 pyspark 数据帧中的新列?

    我有 pyspark df1 id name email age college 12 Sta email protected cdn cgi l email protection 25 clg1 21 Danny email protec
  • MVC 6 中多个网站的通用 wwwroot 文件夹

    我有多个网站使用 wwwroot assets文件夹 html 主题 css 和 javascript 文件 来加载静态内容 目前我正在复制assets每个站点中的文件夹 我的所有项目都位于一个公共父目录下 我不想复制 wwwroot as
  • 基于 Codeigniter 数据库的配置设置

    我正在使用最新版本的 Codeigniter 2 0 构建一个应用程序 我想你可能会说 我的应用程序是动态的 有点像自定义 CMS 我有一个名为 设置 的数据库表 其中包含以下字段 id name value 基本上我当前正在做的是使用辅助
  • 将 C char[][] 数组封送至 C#

    我已经看了又看并尝试了我能想到的或找到的建议 我仍然没有运气获得我需要的数据 我正在使用第三方 DLL 我相信它是用 C 编写的 我需要用 C 访问此 DLL 中的函数 在大多数情况下 除了一项功能外 我都可以使用此功能 我遇到问题的函数具
  • 防止用户停止进程

    长话短说 我需要创建一个应用程序来监视计算机上的音量 无论如何 计算机用户都不能停止该应用程序 我需要让我的应用程序在计算机启动时启动 这样用户就不能在应用程序不运行的情况下重新启动它来进入会话 到目前为止 我还不知道该怎么做 但通过一些研
  • Netbeans 中 SQLite 的 JDBC:找不到合适的驱动程序

    我需要将 SQLite 文件中的数据加载到我在 Netbeans 中开发的 java 程序中 该文件将通过摆动菜单项加载 我在用着SQLitejdbc https bitbucket org xerial sqlite jdbc downl
  • 如何查看应用程序发布版本的 Flutter 调试控制台输出?

    使用 print 记录消息在调试模式下工作 我可以在 VSCode 的调试控制台或终端中看到输出 我怎样才能获得那些发布版本 我已经看到发布版本生成了此类日志 但不知道如何获取这些日志 Run flutter logs 在 flutter
  • 删除 SQL Server Management Studio 中记住的登录名和密码列表

    我最近在修理我的笔记本电脑时使用了我们公司的备用笔记本电脑 已设置普通用户 登录数据库时 我在 SQL Server Management Studio 中选中了 记住密码 选项 我需要清除我所使用的登录名和密码信息 以防止下一个使用笔记本
  • 如何使用 golang 检查 s3 对象大小

    我已经实现了一个从 AWS S3 存储桶下载对象的功能 这很好用 但我需要显示下载进度条 为此 我需要根据以下公式事先知道对象的大小here https github com cheggaaa pb 有谁知道如何获取对象的大小 这是我的代码
  • JTextArea Shift + Enter 换行

    我已向 JTextArea 字段添加了一个按键侦听器 但它的行为并不符合我的预期 inputTextArea addKeyListener new KeyAdapter public void keyPressed KeyEvent k I