gpt4 book ai didi

java - KeyEvent 的问题

转载 作者:行者123 更新时间:2023-12-01 18:35:09 27 4
gpt4 key购买 nike

我有一个面板,上面有 Jtextfield只接受数字。因此,当我按 Enter 时将加载用户配置文件。这只是为了查看他的个人资料。

我想要的:当我再次按 ENTER 键时,所有配置文件都将被清除,当我按数字并再次按 ENTER 键并一次又一次加载配置文件时...

我的问题:我按下回车键,配置文件被清除(好吧,一切都很好),但是当我输入数字并按下回车键时,数字被清除,什么也没有发生,就像matriculaTxt.addKeyListener(new KeyAdapter() { ... }中的循环一样

抱歉我的英语不好。

private void matriculaTxtActionPerformed(java.awt.event.ActionEvent evt)
{
String matricula = matriculaTxt.getText().trim();

if (!matricula.matches("[0-9]+")) {
matriculaTxt.setText("");
} else {
fc = new FrequenciaController();
matriculaTxt.setEditable(false);
matriculaTxt.requestFocus();
fc.checkinManual(Integer.parseInt(matricula));
}

// the problem is here.
matriculaTxt.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
nomeTxt.setText("");
statusTxt.setText("");
imageLb.setIcon(null);
acessoLabel.setText("");
matriculaTxt.setText("");
observacaoTxt.setText("");
System.err.println("ENTER");
PendenciasTableModel ptm = new PendenciasTableModel();// vazio
pendenciasTabela.setModel(ptm);
matriculaTxt.setEditable(true);
matriculaTxt.requestFocus();
}
}
});
}
<小时/>

我想做的事情很简单。用户在文本字段中输入他们的号码,然后按 ENTER:他们的数据被加载。 requestFocus()进入文本字段,它将不再可编辑,因为当我再次按 Enter 时,该字段将可编辑,但所有内容都将被删除,依此类推。

最佳答案

首先,你永远不应该使用 KeyListener 来做这种事情。考虑使用 JFormattedTextField 或使用 DocumentFilter 来防止非数字输入。接下来,您应该使用 ActionLIstener 让 JTextField 接受用户按下 Enter 键并使用react。

<小时/>

编辑
您声明:

my exact requirements is, when i press ENTER again all data will be cleaned for a new data be inserted.

为什么不简单地在 JTextField 的 ActionLIstener 中添加:

 @Override
public void actionPerformed(ActionEvent e) {
// get the text
JTextComponent textComp = (JTextComponent) e.getSource();
String text = textComp.getText();

// do what you want with text here

// clear the text
textComp.setText("");
}

再次强调,您不应该将 KeyListener 用于任何此类内容。

<小时/>

编辑2
如果您想要一个多状态操作监听器(根据程序状态做出不同 react 的监听器),则为其提供一些 if block 以允许其对 JTextField 的状态使用react。如果字段为空,则执行一项操作,如果有数字,则执行另一项操作,如果有文本,则显示警告并清除它:

 @Override
public void actionPerformed(ActionEvent e) {
// get the text
JTextComponent textComp = (JTextComponent) e.getSource();
String text = textComp.getText().trim(); // trim it to rid it of white space

if (text.isEmpty()) {
// code to show a profile
return; // to exit this method
}

// if we're here, the field is not empty

if (!text.matches("[0-9]+")) {
// show a warning message here
} else {
// numeric only data present
// do action for this state

}
// clear the text
textComp.setText("");
}

关键是不要使用 KeyListener,而是仅使用 ActionListener“监听”回车键按下,但根据程序的状态做出不同的 react ,这里可能取决于 JTextField 中存在的内容。

关于java - KeyEvent 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22336491/

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