gpt4 book ai didi

java - 尝试让 View 反射(reflect)编辑者的状态

转载 作者:行者123 更新时间:2023-12-01 05:17:33 25 4
gpt4 key购买 nike

我有一个观点,我想对编辑器中发生的事情使用react。现在我有一个我想要的按钮,这样当单击它时,它会将 View 中的数据更新为一些新的信息集。我从哪里开始,我有我的选择 Activity ,但不知道如何在两者之间进行沟通。我正在寻找松散耦合的解决方案。

最佳答案

我确信有很多方法可以做到这一点,但我使用了 JFace IPropertyChangeListener过去用于简单事件传播的接口(interface)。

使您的 View 实现 IPropertyChangeListener。创建一个可以注册 IPropertyChangeListener 的 Singleton 类,并发送 PropertyChangeEvent到。然后在 View 的构造函数中,将其注册到您的单例中。

现在,您可以在编辑器中获取 Singleton,并触发一个将在您的 View 中拾取的事件。

单例示例代码:

public class PropertyChangeEventBus {

private static PropertyChangeEventBus s_instance = new PropertyChangeEventBus();

public static PropertyChangeEventBus instance()
{
return s_instance;
}

private Set<IPropertyChangeListener> m_listeners;

private PropertyChangeEventBus()
{
// use CopyOnWriteArraySet to prevent ConcurrentModificationExceptions
m_listeners = new CopyOnWriteArraySet<IPropertyChangeListener>();
}

public void addListener(IPropertyChangeListener listener)
{
m_listeners.add(listener);
}

public void removeListener(IPropertyChangeListener listener)
{
m_listeners.remove(listener);
}

public void fire(final PropertyChangeEvent event)
{
// run property change events in UI thread to prevent having to have lots of syncExecs in the listener methods
ViewUtils.syncExec(new Runnable()
{
@Override
public void run()
{
for (IPropertyChangeListener listener : m_listeners)
{
try
{
listener.propertyChange(event);
}
catch(Exception e)
{
//log it, present error message
}
}
}
});
}
}

View 的示例代码:

//The constructor
public MyView()
{
PropertyChangeEventBus.instance().addListener(this);
}

@Override
public void propertyChange(PropertyChangeEvent event)
{
if(event.getProperty().equals(SOME_CONSTANT))
{
// Refresh View
}
}

关于java - 尝试让 View 反射(reflect)编辑者的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935151/

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