代号一 - 扫描条形码检查新 line/ENTER 字符
Codename One - scanning barcodes checking for new line/ENTER character
在 Android 我可以使用 setOnEditorActionListener 方法轻松检测到 ENTER 字符,这样当条形码被扫描到文本字段中时,我知道整个条形码何时被读取。
[这里是请求的 Android 代码:]
scanEditText.setOnEditorActionListener(new TextView.OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN )))
{
System.out.println(" *** ENTER!");
return true;
}
else
return false;
}
});
我一直在尝试在代号一中复制它,但没有成功。我试过了
- setDoneListener
- addDataChangedListener
- 文本字段和文本区域上的 ActionEvent
- 覆盖 keyPressed 和 keyReleased 方法
但没有快乐。如果我用 setSingleLineTextArea(false) 设置一个文本字段,我可以看到条形码字符出现在框中,后面跟着我假设的是
新行字符作为下一次扫描出现在新行上。 None 列出的方法似乎捕获此事件。如果我将焦点更改为另一个框,则会触发 ActionEvent,但我不想每次都移动焦点。
[这里是Codenameone代码]
gui_searchTextField.setSingleLineTextArea(false);
gui_searchTextField.setDoneListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Dialog.show("KB", "doneListener " +
gui_searchTextField.getText().trim(), "OK", null);
}
});
gui_searchTextField.addDataChangedListener((evt1, evt2) ->
{
System.out.println("DataChanged " + gui_searchTextField.getText());
});
那么,如何像在 Android SDK 中一样轻松地捕捉条形码的结尾?
在所有 OS 中,文本输入对我们来说是一个非常特殊的情况,因此按键直接进入本机 OS 文本编辑,而不是 "travel" 通过代号一个 API。但是,应该为每个键输入调用 DataChangeListener
,所以我不确定这是怎么发生的。
我确实注意到您使用的是 System.out
而不是 Log.p
,因此您可能会错过与更改相关的设备输出。此外,我建议覆盖关键的 pressed/released 事件,而不是开始文本编辑。然后将键值添加到文本字段,而不是让本机输入处理它,例如:
class MyForm extends Form {
public void keyReleased(int key) {
if(isCrLf(key)) {
// do this...
} else {
myTextField.setText(myTextField.getText() + ((char)key));
}
}
}
在 Android 我可以使用 setOnEditorActionListener 方法轻松检测到 ENTER 字符,这样当条形码被扫描到文本字段中时,我知道整个条形码何时被读取。
[这里是请求的 Android 代码:]
scanEditText.setOnEditorActionListener(new TextView.OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN )))
{
System.out.println(" *** ENTER!");
return true;
}
else
return false;
}
});
我一直在尝试在代号一中复制它,但没有成功。我试过了
- setDoneListener
- addDataChangedListener
- 文本字段和文本区域上的 ActionEvent
- 覆盖 keyPressed 和 keyReleased 方法
但没有快乐。如果我用 setSingleLineTextArea(false) 设置一个文本字段,我可以看到条形码字符出现在框中,后面跟着我假设的是 新行字符作为下一次扫描出现在新行上。 None 列出的方法似乎捕获此事件。如果我将焦点更改为另一个框,则会触发 ActionEvent,但我不想每次都移动焦点。
[这里是Codenameone代码]
gui_searchTextField.setSingleLineTextArea(false);
gui_searchTextField.setDoneListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Dialog.show("KB", "doneListener " +
gui_searchTextField.getText().trim(), "OK", null);
}
});
gui_searchTextField.addDataChangedListener((evt1, evt2) ->
{
System.out.println("DataChanged " + gui_searchTextField.getText());
});
那么,如何像在 Android SDK 中一样轻松地捕捉条形码的结尾?
在所有 OS 中,文本输入对我们来说是一个非常特殊的情况,因此按键直接进入本机 OS 文本编辑,而不是 "travel" 通过代号一个 API。但是,应该为每个键输入调用 DataChangeListener
,所以我不确定这是怎么发生的。
我确实注意到您使用的是 System.out
而不是 Log.p
,因此您可能会错过与更改相关的设备输出。此外,我建议覆盖关键的 pressed/released 事件,而不是开始文本编辑。然后将键值添加到文本字段,而不是让本机输入处理它,例如:
class MyForm extends Form {
public void keyReleased(int key) {
if(isCrLf(key)) {
// do this...
} else {
myTextField.setText(myTextField.getText() + ((char)key));
}
}
}