当前位置: 首页 > 知识库问答 >
问题:

Java Swing JTextArea插入符号拒绝移动到左上角

武琛
2023-03-14
private void jTextArea2KeyPressed(java.awt.event.KeyEvent evt) {                                      
    if(evt.getKeyCode() == KeyEvent.VK_ENTER){
        try {
            sendCommand("hf", "ab4mw", jTextArea2.getText().trim());
            jTextArea1.append(TX + jTextArea2.getText().trim() + nl);
            jTextArea2.setText("");
            System.out.println("carat: " + jTextArea2.getCaretPosition());
            System.out.println("length: " + jTextArea2.getText().length());
            jTextArea2.setCaretPosition(0);
            //jTextArea2.moveCaretPosition(0);
            System.out.println("line: " + jTextArea2.getLineCount());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

...无限。

我是不是错过了一些简单的东西?

共有1个答案

邹华池
2023-03-14

public void keyPressed(KeyEvent e){方法更改为

public void keyReleased(KeyEvent e) {

好吧,为什么这只发生在按下键的上?我不太确定,但我的猜测是JTextArea首先处理JTextareA2.SetCaretPosition(0);之后才会中断行(在TextArea中enter键自然会这样做)。当keyrelease时,情况显然不是这样,然后它在断行后调用jtextarea2.setcaretposition(0);,这就是您想要的。

下面是一个例子:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.border.LineBorder;

public class Example extends JFrame {

    public Example() {

        JFrame frame = new JFrame();
        frame.setLayout(new GridLayout(2,0));

        JTextArea jTextArea1 = new JTextArea();
        jTextArea1.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    jTextArea1.setText("");
                    System.out.println("carat: "
                            + jTextArea1.getCaretPosition());
                    System.out.println("length: "
                            + jTextArea1.getText().length());
                    jTextArea1.setCaretPosition(0);
                    // jTextArea2.moveCaretPosition(0);
                    System.out.println("line: " + jTextArea1.getLineCount());
                }
            }
        });
        jTextArea1.setBorder(new LineBorder(Color.BLACK));
        jTextArea1.setText("This TextArea will not work like you want it to");

        JTextArea jTextArea2 = new JTextArea();
        jTextArea2.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    jTextArea2.setText("");
                    System.out.println("carat: "
                            + jTextArea2.getCaretPosition());
                    System.out.println("length: "
                            + jTextArea2.getText().length());
                    jTextArea2.setCaretPosition(0);
                    // jTextArea2.moveCaretPosition(0);
                    System.out.println("line: " + jTextArea2.getLineCount());
                }
            }
        });
        jTextArea2.setBorder(new LineBorder(Color.BLACK));
        jTextArea2.setText("This TextArea WILL");

        frame.add(jTextArea1);
        frame.add(jTextArea2);
        frame.setSize(500, 500);
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        new Example();
    }
}
 类似资料:
  • 尽管 JavaScript 有 C 的代码风格,但是它不强制要求在代码中使用分号,实际上可以省略它们。 JavaScript 不是一个没有分号的语言,恰恰相反上它需要分号来就解析源代码。 因此 JavaScript 解析器在遇到由于缺少分号导致的解析错误时,会自动在源代码中插入分号。 var foo = function() { } // 解析错误,分号丢失 test() 自动插入分号,解析器重

  • 在Payara 5.194上运行Java EE 8 web应用程序。自从我启动Payara及其应用程序以来,已经有一段时间了。 当我启动服务器时:我收到6个过期证书的消息。 之后我得到了这个异常 没有代码被改变,什么都没有。Payara就是不会启动。

  • 关于代号一的快速问题。我将如何处理连接被拒绝的错误?我有所有的响应侦听器,它们在ConnectionRequest对象中被重写,但当发生连接拒绝错误时,它不会遍历我的代码,应用程序会崩溃。非常感谢。

  • 我正在为我的站点创建一个配置文件图片上载功能,但由于某种原因,不想运行。 我尝试了多个论坛,测试了所有可能的不同方法,但没有运气。 因此,首先,我检查所选文件是否有有效的扩展名,如果有,它将用microtime散列文件临时名(出于安全考虑)。然后,我将扩展连接到结尾,中间有一个句号,即输出将是。 然后通过将文件变量连接到目录的末尾来创建一个文件路径变量。 然后,通过传递和变量(就像您应该做的那样)

  • 问题内容: 所以我有一个我想在一部分文本的开头插入一个。我怎样才能做到这一点?显示文字时,如何创建一个创建该项目符号的点? 编辑:* 应该在 iOS 上可用 * 问题答案: 简单一点:[mutableAttributedString insertAttributedString:@“•\ t” atIndex:0]; 难点。遵循以下内容。(这是从一个较大的项目中摘录的,但可能会为您提供一个不错的开

  • 我的插入符号包有问题,请查看下面的错误, 错误:Dyn.load(file,DLLpath=DLLpath,...)中“cert”的包或命名空间加载失败:无法加载共享对象“/library/framework/R.framework/versions/4.0/resources/library/rcpp/libs/rcpp.so”:dlopen(/library/framework/R.frame