【问题标题】:Does org.eclipse.jface.preference.FileFieldEditor.setFileExtensions(String[]) work only in file explorer?org.eclipse.jface.preference.FileFieldEditor.setFileExtensions(String[]) 仅在文件资源管理器中有效吗?
【发布时间】:2022-01-19 10:42:54
【问题描述】:

我只允许在我的FileFieldEditor 中使用*.exe 文件。它在文件资源管理器中运行良好,但如果我输入其他文件类型的文本字段路径,我不会收到错误消息(文件存在)。这是正确的行为吗?如果是这样,我可能要检查字符串是否以“.exe”结尾,或者是否有一些实现的功能?

感谢您的帮助!

package test.preferences;

//imports

public class RootPP extends FieldEditorPP implements IWorkbenchPP
{
  //code

  @Override
  protected void createFieldEditors()
  {
    // code
    
    // Web browser
    FileFieldEditor browserFE = new CustomFileFieldEditor(
        PConstants.P_BROWSER_INSTALL_PATH, 
        "Web browser", 
        getFieldEditorParent());
    browserFE.setChangeButtonText("Browse...");
    browserFE.setEmptyStringAllowed(true);
    browserFE.setFileExtensions(new String[]{"*.exe"});//allow only *.exe files
    
    addField(browserFE);
    
    //code
  }
  //code
  
}

和:

package test.preferences;

//imports

public class CustomFileFieldEditor extends FileFieldEditor
{
  private boolean isPathValid;
  
  public CustomFileFieldEditor(String name, String labelText, Composite parent)
  {
    //this(name, labelText, parent, true);
    init(name, labelText);
    //this.enforceAbsolute = enforceAbsolute;
    setErrorMessage(JFaceResources.getString("FileFieldEditor.errorMessage"));
    //$NON-NLS-1$
    //setChangeButtonText(JFaceResources.getString("openBrowse"));//$NON-NLS-1$
    //setValidateStrategy(validationStrategy);
    setValidateStrategy(VALIDATE_ON_KEY_STROKE);
    createControl(parent);
  }
  
  @Override
  protected boolean doCheckState() {
    //code
  }
  
  @Override
  protected boolean checkState()
  {
    //code
    
    if (isPathValid)
      clearErrorMessage();
    else
    {
      Display.getCurrent().timerExec(2000, () -> {
        if (!isPathValid && !getTextControl().isDisposed()) 
          showErrorMessage(errorMessage);
      });
    }
    return isPathValid;
  }
}

【问题讨论】:

    标签: eclipse jface


    【解决方案1】:

    setFileExtensions(和setFilterPath)方法仅用于设置可能显示的任何FileDialog 的参数。它们不用于对文本进行任何验证。所以你需要做验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2014-02-18
      • 2013-01-10
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多