Java 在文本字段中输入的8和4个字符上的不同操作
我正在使用一个旧的java框架(Java6)。 我必须对手动输入和扫描输入执行不同的操作 该框架以字符串、手动(通过键盘)的形式提供,长度为4个字符,需要我使用它执行操作。 通过usb扫描仪扫描时,字符串长度为8个字符,不是1个块,而是每个字符连续快速扫描Java 在文本字段中输入的8和4个字符上的不同操作,java,actionlistener,java-6,Java,Actionlistener,Java 6,我正在使用一个旧的java框架(Java6)。 我必须对手动输入和扫描输入执行不同的操作 该框架以字符串、手动(通过键盘)的形式提供,长度为4个字符,需要我使用它执行操作。 通过usb扫描仪扫描时,字符串长度为8个字符,不是1个块,而是每个字符连续快速扫描 @Override public void actionPerformed(EventObject arg) { if (arg.getSource().equals(txfInput)) { if(txfInput.
@Override
public void actionPerformed(EventObject arg) {
if (arg.getSource().equals(txfInput)) {
if(txfInput.length()==4){
doAction(txfInput);
}else if(txfInput.length()==8){
doOtherAction(txfInput);
}
}
}
这种方法的问题是,当使用扫描仪扫描时,它会在8的第4个字符上触发。我怎样才能让它通过第四个字符
我还没有测试过这一点,但我认为这将相当于我在Swing中的代码
public class Test extends JFrame {
JTextField text = new JTextField("Press Return", 8);
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
text.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(text.getText().length()==4){
do something
} else if(text.getText().length()==8){
do something else
}
}
});
getContentPane().add(text, "Center");
pack();
}
public static void main(String[] args) {
new Test().setVisible(true);
}
}
ActionListener只有在收到Enter后才会触发,而不是逐个字符触发?这意味着对于扫描仪输入,text.getText()值的长度将始终为8个字符 如果没有,也许可以添加一个KeyListener来捕获手动输入事件并检查长度是否为4,并为扫描程序事件添加ActionListener,检查长度是否为8
text.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(text.getText().length()==8){
do something
}
}
});
text.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent keyEvent) {
}
public void keyReleased(KeyEvent keyEvent) {
}
public void keyTyped(KeyEvent keyEvent) {
if(text.getText().length()==4){
do something
}
}
});
不确定扫描器是否也会触发这些按键事件…我不确定变量
txfInput
在代码中的含义。但我理解你的问题。似乎可以延迟调用方法doAction
,如果长度超过四个字符,则取消调用。你可以这样做:
private AtomicBoolean doFourCharacters = new AtomicBoolean(true);
public void actionPerformed(EventObject arg) {
final String txfInput = arg.getSource().toString();
if (txfInput.length() == 4) {
doFourCharacters.set(true);
new Timer().schedule(
new TimerTask() {
@Override
public void run() {
if (doFourCharacters.get()) {
doAction(txfInput);
}
}
}, 500 /* here you should set suitable delay value */);
} else if(txfInput.length() == 5) {
doFourCharacters.set(false);
} else if(txfInput.length() == 8) {
doOtherAction(txfInput);
}
}
答案很愚蠢,设置扫描仪扫描得更快,但@AnarAmratanov的答案可能也会起作用。Swing代码只是一个可调试的示例,实际代码会在输入的每个字符上触发,因此它确实更像一个keylistener,当总数为8个字符时,它会在4个字符处触发,因此我通过加快速度来修复它不触发
length==4