VerifyListener 不允许在 SWT 文本中执行 CTRL + X 操作
VerifyListener not allowing CTRL + X action in SWT Text
当我添加 VerifyListener
以允许仅向 Text
输入数字时,Ctrl+x功能不工作。文本框的内容没有被清除。 Ctrl+c 工作正常。
这可能是什么原因?
@Override
public void verifyText(VerifyEvent e) {
char inputChar = e.character;
int keyCode = e.keyCode;
e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode == SWT.DEL;
}
}
您特别需要允许 Text
为空,即在 Listener
中 SWT.Verify
,检查它是否为空,然后 然后 检查它是否是一个数字。这将达到目的:
public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Whosebug");
shell.setLayout(new FillLayout(SWT.VERTICAL));
Text text = new Text(shell, SWT.BORDER);
text.addListener(SWT.Verify, new Listener()
{
@Override
public void handleEvent(Event event)
{
Text source = (Text) event.widget;
String oldString = source.getText();
String newString = oldString.substring(0, event.start) + event.text + oldString.substring(event.end);
if(newString.length() == 0)
{
return;
}
else
{
try
{
Double.parseDouble(newString); // Or Integer.parseInt(newString);
}
catch (NumberFormatException e)
{
event.doit = false;
}
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
@Override
public void verifyText(VerifyEvent e) {
char inputChar = e.character;
int keyCode = e.keyCode;
String inputString = e.text;
e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode==SWT.DEL||inputString=="";
}
如果从“文本”小部件获取的文本是“”,我会对其进行检查,并且工作正常。
当我添加 VerifyListener
以允许仅向 Text
输入数字时,Ctrl+x功能不工作。文本框的内容没有被清除。 Ctrl+c 工作正常。
这可能是什么原因?
@Override
public void verifyText(VerifyEvent e) {
char inputChar = e.character;
int keyCode = e.keyCode;
e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode == SWT.DEL;
}
}
您特别需要允许 Text
为空,即在 Listener
中 SWT.Verify
,检查它是否为空,然后 然后 检查它是否是一个数字。这将达到目的:
public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Whosebug");
shell.setLayout(new FillLayout(SWT.VERTICAL));
Text text = new Text(shell, SWT.BORDER);
text.addListener(SWT.Verify, new Listener()
{
@Override
public void handleEvent(Event event)
{
Text source = (Text) event.widget;
String oldString = source.getText();
String newString = oldString.substring(0, event.start) + event.text + oldString.substring(event.end);
if(newString.length() == 0)
{
return;
}
else
{
try
{
Double.parseDouble(newString); // Or Integer.parseInt(newString);
}
catch (NumberFormatException e)
{
event.doit = false;
}
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
@Override
public void verifyText(VerifyEvent e) {
char inputChar = e.character;
int keyCode = e.keyCode;
String inputString = e.text;
e.doit = Character.isDigit(inputChar) || keyCode == SWT.BS || keyCode==SWT.DEL||inputString=="";
}
如果从“文本”小部件获取的文本是“”,我会对其进行检查,并且工作正常。