gpt4 book ai didi

Java Swing : How to get TextArea value including the char just typed?

转载 作者:行者123 更新时间:2023-11-29 06:23:15 25 4
gpt4 key购买 nike

在键入键(包括此字符)后获取 TextArea 值的最佳方法是什么?

如果我在 even 监听器中执行此操作,textarea.getText() 将返回没有最终新字符的值。

基本上我看到两种方式:

  1. 使用诸如 invokeLater() 之类的方法推迟处理。我更喜欢没有线程的解决方案。

  2. 根据插入字符的位置找出将字符放入文本的位置。

还有其他更简单的吗?

谢谢。

编辑:这就是我的:

JTextArea textarea = (JTextArea) evt.getComponent();
String texySource = textarea.getText();
char keyCode = evt.getKeyChar();
//if( Character.isLetterOrDigit( keyCode ) || Character.isSpaceChar( keyCode ) )
if( keyCode >= 0x20 || keyCode == 0x0A || keyCode == 0x0D ){
// TODO: The carret doesn't have to be at the end...
//texySource += Character.toString( evt.getKeyChar() );

String ch = Character.toString( evt.getKeyChar() );
texySource = StringUtils.overlay(texySource, ch,
textarea.getSelectionStart(),
textarea.getSelectionStart() );
}

最佳答案

您是否考虑过文档监听器?可能是被打字事件武装起来的?

class TheListener implements DocumentListener, KeyListener {
boolean armed;

void keyPressed(KeyEvent ignore) { }
void keyReleased(KeyEvent ignore) { }
void keyTyped(KeyEvent e) {
armed = true;
SwingUtilities.invokeLater(new Runnable() { public void run() {
armed = false;
}
}

void deleteUpdate(DocumentEvent e) {
changeUpdate(e);
}
void insertUpdate(DocumentEvent e) {
changeUpdate(e);
}
void changedUpdate(DocumentEvent e) {
if (armed) {
String s = ((JTextComponent)e.getSource()).getText();
//.... whatever you want to do now
}
}
}

//...
TheListener aListener = new TheListener();
textArea.addKeyListener(aListener);
textArea.getDocument().addDocumentListener(aListener);

理论是在键入的键上武装文档更改监听器,然后添加 EDT 事件以解除它。文档更改将在解除武装之前首先发生。一旦准备就绪,您可以假设任何文档更改在某些部分是由按键输入事件引起的。 (警告,我还没有编译这段代码,YMMV)。

关于Java Swing : How to get TextArea value including the char just typed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2137111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com