gpt4 book ai didi

java - java点击按钮时如何触发退格键事件

转载 作者:行者123 更新时间:2023-12-01 22:48:34 24 4
gpt4 key购买 nike

如何在单击按钮时触发退格键按下事件。

private void doClick(char type)
{
jTextField1.dispatchEvent(new KeyEvent(jTextField1, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_7, type));
jTextField1.dispatchEvent(new KeyEvent(jTextField1, KeyEvent.KEY_TYPED, System.currentTimeMillis(),KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_UNDEFINED, type));
jTextField1.dispatchEvent(new KeyEvent(jTextField1, KeyEvent.KEY_RELEASED, System.currentTimeMillis(),KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_7, type));
}

我使用这种方法在单击按钮时添加一个字符。有没有什么机制可以触发这样的退格键按下事件。

最佳答案

好吧,在我回答问题之前,因为我认为这种方法很肮脏,这里有两个相似的概念......

您可以使用Action API ,这将允许您定义独立的工作单元。在插入新值的特定情况下,这些可能是抽象的以完成繁重的工作,但这演示了删除字符的用例......

public class BackspaceAction extends AbstractAction {

private JTextField field;

public BackspaceAction(JTextField field) {
putValue(NAME, "Back-space");
this.field = field;
}

@Override
public void actionPerformed(ActionEvent e) {
String text = field.getText();
if (!text.isEmpty()) {
int position = field.getCaretPosition();
if (position > 0) {
text = text.substring(0, position - 1) + text.substring(position);
field.setText(text);
field.setCaretPosition(Math.max(position - 1, 0));
}
}
}

}

或者通过使用文档本身...

public class BackspaceAction extends AbstractAction {

private JTextField field;

public BackspaceAction(JTextField field) {
putValue(NAME, "Back-space");
this.field = field;
}

@Override
public void actionPerformed(ActionEvent e) {
Document doc = field.getDocument();
if (doc.getLength() > 0) {
int position = field.getCaretPosition();
if (position > 0) {
try {
doc.remove(position - 1, 1);
field.setCaretPosition(Math.max(position - 1, 0));
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
}
}

}

这将简单地使用类似的东西来实例化......

JButton back = new JButton(new BackspaceAction(field));

如果您一心想深入了解 API 的底层底层,那么就像......

char value = (char)8;
field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_BACK_SPACE, value));
field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_RELEASED, System.currentTimeMillis(), 0, KeyEvent.VK_BACK_SPACE, value));
field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_TYPED, System.currentTimeMillis(), 0, KeyEvent.VK_UNDEFINED, value));

可能有用。我说可能,因为这确实适用于 Windows 7,但我不保证它是否适用于任何其他平台或 Windows 版本

现在,对我来说,我可以查看其他两个 Action 并了解它们正在尝试执行的操作,我查看关键事件方法并开始挠头想知道为什么,但是这就是我...

关于java - java点击按钮时如何触发退格键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028305/

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