我在Eclipse RCP应用程序中有一些看起来像这样的代码(它在部件的@PostConstruct
方法中):
scroll = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
taskingInputsGroup = new Composite(scroll, SWT.NONE);
textSendTime = new Text(taskingInputsGroup, SWT.BORDER);
textSubject = new Text(taskingInputsGroup, SWT.BORDER);
textTaskStartTime = new Text(taskingInputsGroup, SWT.BORDER);
我正在尝试为每个private Control
对象设置Enum常量的Text
字段:
textSendTime = new Text(taskingInputsGroup, SWT.BORDER);
MsgField.SEND_TIME.setControl(textSendTime);
在Enum中,我只为Control
字段设置了一个简单的getter / setter。
我有一个用户按下Button
时调用的方法。此方法循环遍历Enum常量,并将某些TreeItem
的文本设置为Control
对象中的任何内容:
MsgField[] msgFields= MsgField.values();
for (int i = 0; i < msgFields.length; i++) {
Control control = msgFields[i].getControl();
if (control != null) {
if (control instanceof Text) {
root.getItem(i).getItem(0).setText(((Text)control).getText());
}
}
}
即使((Text)control).getText()
字段中有文字,我也会从Text
收到空文字。为什么会这样?我知道我忽略了一些简单的事情(这是漫长的一天)。我已经阅读了一些关于Java传递值的SO帖子,但我似乎无法应用这个问题的答案。如果我直接在视图类中的对象上调用getText()
,这可以正常工作:
root.getItem(1).getItem(0).setText(textSendTime.getText());
编辑 - 一些MsgField
枚举代码:
public enum MsgField {
private boolean isRequiredField;
private String treeName;
public abstract void setValue(Msg msg, String value);
public abstract Object getValue(Msg msg);
private MsgField(boolean req, String name) {
isRequiredField = req;
treeName = name;
}
SEND_TIME("Send Time", true) {
@Override
public void setValue(Msg msg, String value) {
msg.setSendTime(value);
}
@Override
public Object getValue(Msg msg) {
return msg.getSendTime();
}
},
// ....
// other fields
// ....
START_TIME("Start Time", false) {
@Override
public void setValue(Msg msg, String value) {
msg.setStartTime(value);
}
@Override
public Object getValue(Msg msg) {
return msg.getStartTime();
}
};
}
所以这里的想法是表示Msg
类的字段,并为每个字段设置这些get / set方法,以便我可以轻松地迭代它们并获取/设置{{1}的字段对象。这很好(虽然也许你可以建议一个更好的选择),但问题来自于我提到的Msg
字段的添加。