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

使用getText输出文本,但在控制台输出时缺少最后一个字符

桓智敏
2023-03-14

我试图从JTextField获取输入,并使用getText()在控制台上输出它。除了没有打印出最后一个字符外,它似乎还在工作。如果我输入“hello”,输出将是“hell”,如果我输入“hello there”,输出将是“hell ther”....缺少最后一个字符。`Public class Generator{

private JFrame frame;
private JTextField textRoomName;
private String roomName;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Generator window = new Generator();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public Generator() {
    initialize();
    
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.getContentPane().setBackground(Color.GRAY);
    frame.setForeground(Color.BLACK);
    frame.setBackground(Color.BLACK);
    frame.setBounds(100, 100, 450, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);
    
    textRoomName = new JTextField();
    textRoomName.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            roomName = textRoomName.getText();
            
        }
    });
    textRoomName.setBounds(140, 52, 212, 20);
    frame.getContentPane().add(textRoomName);
    textRoomName.setColumns(10);
    
    JButton btnGenerate = new JButton("Generate");
    btnGenerate.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println(roomName);
        }
    });
    btnGenerate.setBounds(324, 427, 89, 23);
    frame.getContentPane().add(btnGenerate);
}

}`

共有1个答案

丁曦哲
2023-03-14
textRoomName.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        roomName = textRoomName.getText();
        
    }
});

不要使用keylistener。生成keyPressed事件时,文档还没有用文本更新。

相反,更好的API是documentlistener

阅读Swing教程中关于以下内容的章节:

  1. 监听文档上的更改和
  2. 如何编写DocumentListener

有关更多信息和示例。

 类似资料:
  • 我一直在尝试编码来查找给定数组元素的LCM。我的代码如下 我的问题是,当我输入时,输出控制台会冻结。我尝试了另一种没有while循环的方法。也就是说,消除了while循环,并在最后添加了一个if循环。 但现在编译器抛出一个错误,指出并非所有代码路径都返回一个值。有人能帮我解决代码中的问题吗?我是一名编程初学者。提前谢谢!!

  • 问题内容: 我想使用在NodeJS 0.12中添加的方法,但仍然在运行Node脚本的控制台窗口中具有输出。 例如,如果我运行具有以下行的NodeJS脚本,我想在控制台中看到rsync命令“ live”的完整输出: 我知道这会返回命令的输出,执行后我可以将其输出到控制台,但是这样我就没有“实时”输出了…… 问题答案: 您可以根据需要将父级的stdio传递给子进程:

  • 在我正在阅读的Python书籍中,我没有得到关于章节结束问题的用户输出。 问题是: 编写一个为用户计数的程序。让用户输入开始编号、结束编号和计数的数量。 这是我想出来的: 在此输入之后,除以下情况外,不会发生任何事情:

  • 我正在尝试使用perl进行简单的问卷调查。我想在用户输入时将响应记录在日志文件中。我在将stdin重定向到文件时遇到问题。 下面是我实现的代码。参考这个。 我现在得到的输出是,只有在用户输入后,问题才被打印出来。 下面是预期的输出: 我还发现了重复的stdin到stdout,但真的无法实现我想要的。我错过了什么吗?! 有更清洁的解决方案吗?

  • 当我在Android Studio上运行应用程序时,我看到了一些垃圾收集输出: 这是什么意思?(我正在阅读大型csv文件,其中有更多70k行)

  • 本文向大家介绍springboot使用Logback把日志输出到控制台或输出到文件,包括了springboot使用Logback把日志输出到控制台或输出到文件的使用技巧和注意事项,需要的朋友参考一下 一:日志: 1、配置日志级别 日志记录器(Logger)的行为是分等级的。如下表所示: 分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 默认情况下,spring boot