- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试做一些看起来应该很常见的事情,所以我很惊讶我很难找到解决方案。
我有一个简单的 Eclipse RCP 应用程序。它由一个 View 组成,其中包含一个分层显示 xml 文件元素的 treeViewer。另一面是一个编辑器,其中包含各种字段,例如文本框等,用于显示和修改 xml 值。树查看器在元素名称旁边显示图标,而我要做的是在编辑器中进行更改时将图标更改为图标的“修改”版本 - 表示该元素的值已更改。这与 Eclipse 在与 Subversion 集成时如何显示文件已从 Package Explorer 中的基本修订版进行了修改非常相似。
我将尝试仅显示与此特定问题相关的代码部分,希望我不会遗漏任何内容。这是编辑器类:
public class XmlEditor extends EditorPart
{
protected boolean dirty = false;
public void setDirty(boolean value)
{
dirty = value;
firePropertyChange(PROP_DIRTY);
}
}
这是树的 View :
public class TreeView extends ViewPart implements IPropertyChangeListener {
public void createPartControl(Composite parent) {
treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
getSite().setSelectionProvider(treeViewer);
treeViewer.setLabelProvider(new TreeObjLabelProvider());
treeViewer.setContentProvider(new TreeObjContentProvider());
PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(this);
}
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(IWorkbenchPartConstants.PROP_DIRTY)) {
treeViewer.refresh();
}
}
}
在这种情况下,TreeView::propertyChange()
没有被调用,即使 firePropertyChange()
被触发。任何想法为什么?我也对不涉及 PropertyChangeListener 的任何其他想法持开放态度,这似乎是当时最简单的方法。谢谢。
最佳答案
这是我最终解决问题的方式:
IPropertyListener
而不是 IPropertyChangeListener
propertyChanged()
方法来执行 treeViewer.refresh()
XmlEditor::createPartControl()
方法中,我获得了对 Treeview
部分的引用,然后将其添加到属性监听器中,如下所示:
TreeView treeView = (TreeView) getSite().getPage().findView(TreeView.ID);
addPropertyListener(treeView);
现在,TreeView::propertyChanged()
在 firePropertyChanged()
之后被调用,就像我需要的那样。需要大量实验才能了解 IPropertyListener
和 IPropertyChangeListener
、addPropertyListener()
和 addPartPropertyListener()
之间的区别>.
感谢 nitind 给了我一个新的视角,并向我展示了装饰器,这绝对是正确的方法,而不是将 TreeMap 标更改为修改后的版本。
关于java - 修改编辑器数据时,Eclipse RCP View 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095237/
我继续阅读 http://eclipse.geekyramblings.net/2010/12/14/preventing-multiple-instances/关于如何防止启动多个 RCP 实例。但
是否可以在基于 RCP 的应用程序中动态更改关于对话框文本?当关于对话框打开时,我想通过动态更改其文本的某些部分来替换 aboutText 值。问题是我有一个客户端/服务器应用程序,其中有关客户端的信
背景 我正在为 uDig 开发一个插件,这是一个基于 Eclipse RCP 构建的项目。我的插件包含一个表格,其中填充了来自 Workbench 选择的数据。用户可以对表格数据进行分组、排序和过滤。
我在重新启动 RCP 应用程序时遇到问题。当我在 Eclipse 下运行时一切正常,但是当我创建独立应用程序方法时重启只需关闭应用程序。我使用下一个代码: IWorkbench 工作台 = Platf
我已经编写了一个 RCP 应用程序。为此,我想使用 log4j 添加日志记录。 有人能提出解决方案吗? 我已经尝试过 this , 但我无法使用它。 感谢任何帮助! 最佳答案 考虑使用 Eclipse
我想在代码中调用 RCP 命令,如下所示: IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
我刚刚开始玩 Eclipse RCP。 我想完成的一些事情: 如何最大化应用程序的初始大小? 我想在我的左边创建一个侧边栏类型 View ,并想固定该 View 的大小并删除任何标题栏,从该侧边栏最小
我目前使用的是 Eclipse Helios Service Release 1。我是 IDE 和平台的新手。 我的问题是,如何在我的应用程序上获得与 IDE 相同的曲线选项卡? 最佳答案 根据 th
在Eclipse RCP中开发“关于窗口”时,我们需要定义: aboutText =我的文本,将在“关于”窗口中显示 在about.ini文件中。 我需要添加在概述页面中定义的版本号 .product
我使用 eclipse kepler(RCP 和 RAP 开发人员的 Eclipse)开发了一个 rcp 产品,但是设置选项卡样式不起作用。我尝试了两种方式 1.config.xml
我创建了一个简单的 Eclipse RCP 应用程序,我可以在其中根据用户操作打开多个编辑器实例。我有一个单独的 View (ViewPart),我在其中监听编辑器上的选择更改。问题是 View 仅被
我有一个 RCP 应用程序。它的默认透视图在编辑器区域的左侧和底部打开两个 View 。选项 SaveAndRestore 设置为 true。下次启动应用程序时,两个 View 都会关闭。为什么?我做
我正在构建一个基于 Eclipse RCP 的产品,我遇到了一个问题,当我尝试使用内置 p2 UI 安装产品更新时,我在对话框中收到一条错误消息“访问权限不足应用此更新。” 我已经调试到 Eclips
我开发了一个 Eclipse RCP 应用程序,我正在从我自己的 Java 程序中调用它。 当我从命令提示符(windows)运行我自己的 Java 程序时,它完美地工作并给出结果。 但是当我在 ec
我想知道是否可以(以及如何)将文件添加到 Eclipse RCP 应用程序的根目录。 我有一个 AppManual.pdf,我想在应用程序的根目录中分发。 最佳答案 退房 http://help.ec
是否可以在我的 Eclipse-RCP 产品中覆盖内置透视图的布局? 特别是,我希望添加一个自定义 View 并更改 Debug 透视图的布局。我知道如何使用自定义透视图 (IPerspectiveF
我必须开发一个简单的基于 Eclipse 的应用程序。我使用 Luna Eclipse RCP IDE(4.4)。我想有没有声明性的方式来启动我的应用程序,主窗口的大小最大化。 提前致谢 最佳答案 您
我想开始一个新项目,它将广泛使用插件。我知道 Eclipse 和 Netbeans 都有各自的富客户端平台,各有优缺点。 我想要一些 Stack Overflow 社区喜欢的评论。 此外,最重要的是,
有没有办法强制 RCP 产品在每次 RCP 被关注时显示欢迎页面? (默认情况下,仅在第一次启动 RCP 时才会显示欢迎页面。) 我在plugin_customization.ini中尝试了org.e
我尝试在 Eclipse RCP 应用程序中使用 classmexer,但我只得到一个 IllegalStateException: java.lang.IllegalStateException:
我是一名优秀的程序员,十分优秀!