VerifyListener 不允许 SWT 文本中的 CTRL + X 操作

Posted

技术标签:

【中文标题】VerifyListener 不允许 SWT 文本中的 CTRL + X 操作【英文标题】:VerifyListener not allowing CTRL + X action in SWT Text 【发布时间】:2017-03-25 15:28:50 【问题描述】:

当我添加 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;
    

【问题讨论】:

请发布您的验证侦听器的代码。 对我的回答有任何反馈吗? 抱歉,因为我已经找到了处理它的方法,所以没有机会尝试代码。我把它贴在下面。无论如何,非常感谢。 【参考方案1】:

您特别需要允许Text 为空,即在您的Listener 中为SWT.Verify,检查它是否为空并然后检查它是否是一个数字。这样就可以了:

public static void main(String[] args)

    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("***");
    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();

【讨论】:

【参考方案2】:
@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=="";

我对从 Text 小部件获得的文本添加检查,如果它是“”,它工作正常。

【讨论】:

以上是关于VerifyListener 不允许 SWT 文本中的 CTRL + X 操作的主要内容,如果未能解决你的问题,请参考以下文章

如何显示 swt 文本框的悬停文本

如何显示swt文本框的悬停文本

文本小部件的 SWT 拖放支持

如何在 swt 中为文本编辑器实现 ctrl+backspace 和 ctrl+delete

如何收听组小部件(Java SWT)的文本修改事件?

获取SWT Text组件修改前的文本