gpt4 book ai didi

java - 使用 Metawidget 将对象与 GUI 中的值同步

转载 作者:行者123 更新时间:2023-11-29 05:59:15 27 4
gpt4 key购买 nike

我正在使用 Metawidget在 GUI 中自动查看/编辑对象中的值。我能够绑定(bind)对象的初始值,并在它们各自的 GUI 组件中看到它们。但是,当我更改 GUI 中的值时,这些更改不会同步回对象。这或多或少地记录在案 here (已弃用)和 here .

这是我的业务对象:

public static class Person {

private String mName;

public String getName() { return this.mName; }

public void setName( String name ) { this.mName = name; }

@UiAction
public void showPersonObject() {
JOptionPane.showMessageDialog(frame, this.mName);
}

@UiAction
public void bind() {
metawidget.getWidgetProcessor(
BeansBindingProcessor.class)
.save( metawidget );
}
}

这是我的主要方法,其中配置了 metawidget:

public static void main( String[] args ) {
// Person
Person person = new Person();
person.setName("A cool name");
// Metawidget
metawidget = new SwingMetawidget();
metawidget.setInspector( new CompositeInspector(
new CompositeInspectorConfig().setInspectors(
new PropertyTypeInspector(),
new MetawidgetAnnotationInspector(),
new BeanValidationInspector())));
metawidget.addWidgetProcessor(
new BeansBindingProcessor(
new BeansBindingProcessorConfig().setUpdateStrategy(
UpdateStrategy.READ_WRITE )) );
metawidget.setToInspect( person );
// Create Frame
...
}

documentation据说:

If set to READ or READ_WRITE (the default is READ_ONCE), the object being inspected must provide PropertyChangeSupport. If set to READ_WRITE, updates to the UI are automatically sync'ed back to the setToInspect, otherwise the client must manually call save:

myMetawidget.getWidgetProcessor( BeansBindingProcessor.class ).save( myMetawidget )

我试过将 UpdateStrategy 设置为 READ 和/或 READ_WRITE,和/或在 BeansBindingProcessor 上调用 save()。我还尝试为 Person 对象提供 PropertyChangeSupport(我认为它指的是 this ),这与添加以下代码相同:

private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);

public void addPropertyChangeListener(PropertyChangeListener listener) {
this.pcs.addPropertyChangeListener(listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
this.pcs.removePropertyChangeListener(listener);
}

public void setName( String name ) {
String oldName = this.mName;
this.mName = name;
this.pcs.firePropertyChange("name", oldName, mName);
}

但是,Person 对象始终保持原始值。

提前致谢。

最佳答案

好吧,我解决了这个问题。互联网上有 beansbinding.jar 的“流氓”版本,这就是绑定(bind)不起作用的原因。我使用了随 Metawidget 示例分发的版本,现在一切正常。

报告此问题here .

关于java - 使用 Metawidget 将对象与 GUI 中的值同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792275/

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