我正在尝试验证多个文本框的输入(即它们应该是一个数字),并在 here 下面找到了有用的代码片段.
但是,如果我有三个文本框(text
、moreText
和 evenMoreText
),我该如何应用具有相同的验证监听器每个功能,而不必重复 (.addVerifyListener(new VerifyListener() {...
) 代码三次?
我不想实现 switch 语句或类似语句(决定将它应用到哪个文本框),我想要更通用的东西(将来我可能可以让其他类使用)。
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
final String oldS = text.getText();
final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);
try {
BigDecimal bd = new BigDecimal(newS);
// value is decimal
// Test value range
} catch (final NumberFormatException numberFormatException) {
// value is not decimal
e.doit = false;
}
}
});
最佳答案
预先定义VerifyListener
并从VerifyEvent
获取实际的Text
:
VerifyListener listener = new VerifyListener()
{
@Override
public void verifyText(VerifyEvent e)
{
// Get the source widget
Text source = (Text) e.getSource();
// Get the text
final String oldS = source.getText();
final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);
try
{
BigDecimal bd = new BigDecimal(newS);
// value is decimal
// Test value range
}
catch (final NumberFormatException numberFormatException)
{
// value is not decimal
e.doit = false;
}
}
};
// Add listener to both texts
text.addVerifyListener(listener);
anotherText.addVerifyListener(listener);
如果你想在其他地方也使用它,创建一个新类:
public class MyVerifyListener implements VerifyListener
{
// The above code in here
}
然后使用:
MyVerifyListener listener = new MyVerifyListener();
text.addVerifyListener(listener);
anotherText.addVerifyListener(listener);
关于java - 在 eclipse-rcp/swt 中创建多个相同的文本验证监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973133/