gpt4 book ai didi

java showMessageDialog 输入文本输入焦点

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

我正在编写一个使用条形码扫描仪作为输入的小应用程序。经过一些测试后,我决定使用 evt.getKeyCode() == KeyEvent.VK_ENTER 来启动对数据库的检查。因此,用户可以在文本框中手动输入条形码,然后按 Enter 键以触发数据库检查,或者使用扫描仪,一旦发送了所有扫描的字符,扫描仪也会自动发送输入字符。

如果扫描的条形码有问题,我会使用 JOptionPane.showMessageDialog 向用户显示错误消息。当用户按 Enter 按钮关闭对话框时,它会再次触发对话框,就像在文本字段上再次按下 Enter 按钮一样。它进入此循环,直到用户用鼠标单击“确定”按钮。

如何避免这种情况...

是否有比使用输入按钮更好的方法来检查扫描仪是否完全发送所有字符并启动数据库检查

或者

有没有办法让文本框在对话框显示时暂时失去焦点,并在对话框关闭时将焦点返回到文本框(用户按 Enter 键/单击“确定”/单击小“x”)。

我已经设法使用 hasFocus() 将焦点返回到文本框,但由于我在框架上只有一个文本框和 Jtable,所以我有点受限。我尝试在显示对话框之前将焦点设置为 Jtable 作为解决方法,然后重新聚焦到 textbox ,但问题仍然存在。即使尝试将焦点设置到框架上,仍然没有成功。

请问有什么想法吗?

最佳答案

以下是使用键绑定(bind)的示例:

public class EnterKey extends JFrame {

EnterKey() {

JPanel base = new JPanel();
base.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "Scan!");
base.getActionMap().put("Scan!", new ScanAction());
base.getInputMap().put(KeyStroke.getKeyStroke("A"), "Simulate error");
base.getActionMap().put("Simulate error", new ErrorAction());

add(base);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}

public static void main(String[] args) {

new EnterKey();
}

private class ScanAction extends AbstractAction {

@Override
public void actionPerformed(ActionEvent e) {

//perform scan
System.out.println("Scan performed");
}
}

private class ErrorAction extends AbstractAction {

@Override
public void actionPerformed(ActionEvent e) {

//open error dialog
JOptionPane.showMessageDialog(EnterKey.this, "Error", "Bad scan", JOptionPane.ERROR_MESSAGE);
}
}
}

框架仅包含一个空面板来接收按键事件。按 Enter 启动扫描,或按 a 弹出错误对话框。如果您按 Enter 关闭对话框,它将不会初始化扫描,除非您按住该键(持续时间取决于操作系统)。

关于java showMessageDialog 输入文本输入焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25993145/

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