gpt4 book ai didi

java - Eclipse 开发 - 根据 FieldEditorPreferencePage 内其他 FieldEditor 的新值更改 FieldEditor

转载 作者:行者123 更新时间:2023-11-30 11:14:12 24 4
gpt4 key购买 nike

Nodeclipse preference Page我希望在更改 expressPath 时更新 expressVersion。

我在下面添加代码,但它不会触发 PropertyChangeEvent,因此不会执行此逻辑。
这里有什么问题?

    expressPath = new FileFieldEditor(PreferenceConstants.EXPRESS_PATH, "Express path:", getFieldEditorParent());
//TODO update expressVersion on expressPath selection
IPropertyChangeListener listener = new IPropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(FieldEditor.IS_VALID)) {
String newValue = (String) event.getNewValue();
expressVersion.setStringValue( ProcessUtils.getCurrentVersionOf(newValue) );
}
}
};
expressPath.setPropertyChangeListener(listener);
addField(expressPath);

expressVersion = new StringFieldEditor(PreferenceConstants.EXPRESS_VERSION, "Selected Express version:", getFieldEditorParent());
expressVersion.setEnabled(false, getFieldEditorParent());
addField(expressVersion);

最佳答案

查看 FieldEditorPreferencePage 的源代码,我发现 initialize()正在为所有文件重置 PropertyChangeListeners

/**
* Initializes all field editors.
*/
protected void initialize() {
if (fields != null) {
Iterator<FieldEditor> e = fields.iterator();
while (e.hasNext()) {
FieldEditor pe = e.next();
pe.setPage(this);
pe.setPropertyChangeListener(this);
pe.setPreferenceStore(getPreferenceStore());
pe.load();
}
}
}

initialize() 在 createFieldEditors() 之后被调用;

protected Control createContents(Composite parent) {
fieldEditorParent = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.marginHeight = 0;
layout.marginWidth = 0;
fieldEditorParent.setLayout(layout);
fieldEditorParent.setFont(parent.getFont());

createFieldEditors();

if (style == GRID) {
adjustGridLayout();
}

initialize();
checkState();
return fieldEditorParent;
}

所以用下面的代码解决了

@Override
protected void initialize() {
super.initialize();
expressPath.setPropertyChangeListener(new MyPropertyChangeListener(this));
}

private class MyPropertyChangeListener implements IPropertyChangeListener{

private FieldEditorPreferencePage page;

public MyPropertyChangeListener(FieldEditorPreferencePage nodePreferencePage) {
page = nodePreferencePage;
}

@Override
public void propertyChange(PropertyChangeEvent event) {
page.propertyChange(event);

// The IS_VALID property is only fired when the valid state changes.
if (event.getProperty().equals(FieldEditor.IS_VALID)) {
isValidPath = ((Boolean) event.getNewValue()).booleanValue();
if (!isValidPath) {
expressVersion.setStringValue( "Selected path is not valid" );
}
return;
}
if (!isValidPath) { // if it is still not valid file, we don't need to check again
return;
}
if (event.getProperty().equals(FieldEditor.VALUE)) {
String newExecutablePath = (String) event.getNewValue();
expressVersion.setStringValue( ProcessUtils.getCurrentVersionOf(newExecutablePath));
}
}
}

关于java - Eclipse 开发 - 根据 FieldEditorPreferencePage 内其他 FieldEditor 的新值更改 FieldEditor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com