标签: treeviewer

在setInput()之前保存TreeViewer状态

我正在尝试保存JFace TreeViewer扩展状态以在调用setInput()方法后刷新它.我试过getExpandedElements,setExpandedElements,getExpandedTreePaths,setExpandedTreePaths的方法,TreeViewer但它不工作.

Object[] expandedElements = viewer.getExpandedElements();
TreePath[] expandedTreePaths = viewer.getExpandedTreePaths();
viewer.setInput();
viewer.setExpandedElements(expandedElements);
viewer.setExpandedTreePaths(expandedTreePaths);
Run Code Online (Sandbox Code Playgroud)

java eclipse user-interface jface treeviewer

10
推荐指数
1
解决办法
4198
查看次数

如何最好地在TreeViewer上使用ViewerFilter?

我正在申请ViewerFilter一棵树上的几棵树,但大多是树叶.过滤器确实适用于叶子,使用叶子内的属性.所有树枝都保持不变,以便它们的叶子可以出现.

但是我想过滤掉不包含选定叶子的分支,我可以看到其中没有ViewerFilter允许这样的机制.

这有可能吗?

例如,给定下面的概念树(其中b是分支,a L是叶子)

b0
  b1
    L2
    L4
    L8
  b2
    L1
    L3
    L5
Run Code Online (Sandbox Code Playgroud)

我想申请一个ViewerFilter只选择甚至包含叶子的树叶和树枝.结果树将是......

b0
  b1
    L2
    L4
    L8
Run Code Online (Sandbox Code Playgroud)

..分支b2不显示,因为它不包含选定的子项,但分支b0b1do.

swt eclipse-plugin jface treeviewer

9
推荐指数
1
解决办法
7227
查看次数

懒惰和延迟的TreeViewer问题

我实际上有两个问题,但它们有点相关,所以在这里它们一样......

如何使用TreeViewer(SWT.VIRTUAL)和ILazeTreeContentProvider?确保当前未显示的树节点的垃圾收集?如果一个节点有5000个子节点,一旦它们被观众显示,它们就永远不会被释放,因此如果你的树有大量的节点和叶子而且堆大小不够大,那么内存不足就会出错.是否有某种最佳实践如何避免内存泄漏,这是由于从未关闭的视图持有一个包含大量数据的树视图(数十万个对象甚至数百万)?也许有一些回调接口可以让观众/内容提供商提供更大的灵活性?

是否可以将deffered(DeferredTreeContentManager)和lazy(ILazyTreeContentProvider)加载组合为单个TreeViewer(SWT.VIRTUAL)?通过查看示例和API,我可以理解,只能在给定时间使用任何一个,但不能同时使用两者,例如,仅获取给定节点的可见子节点并使用Job在单独的线程中获取它们API.困扰我的是Deferred方法加载所有孩子.虽然在不同的线程中,您仍然会加载所有元素,即使一次只显示最小子集.

如果需要,我可以为我的问题提供代码示例...

我现在正在与自己挣扎,所以如果我能在此期间拿出一些东西,我很乐意在这里分享.

谢谢!

此致,Svilen

eclipse swt jface treeviewer

9
推荐指数
1
解决办法
4519
查看次数

SWT:如何仅使用一个滚动条来滚动两个单独的查看器

我将两个TreeViewers放入 SWT Shell

他们每个人都有自己的滚动条。不过,我想只有一个ScrollbarShell其控制的滚动TreeViewers同时。

我能够找到的唯一示例是在源比较视图中。但是,我看不出他们是如何做到这一点的——我已经尝试弄明白了一段时间。但至少我知道这是可能的。

有什么建议?

编辑

我的最终界面应该在左边有两个TreeViewers和一个Scrollbar来控制它们。

java swt jface scrollbar treeviewer

5
推荐指数
1
解决办法
1420
查看次数

突出显示时更改SWT树节点文本前景

我在SWT / JFace技术方面还很陌生,但发现了一个令我抓狂的问题。在Eclipse RCP应用程序中,我有一个视图,其中放置了带有JFace TreeViewer的SWT树,该JFace TreeViewer通过标签提供程序提供标签和图标。根据客户的要求,树的背景颜色为深蓝色,字体颜色为白色。当选择了节点时,这种颜色组合会导致节点文本的可视化效果不佳,文本不适合树形区域,并且我们将鼠标指针放在节点上。以某种方式出现“本机突出显示”。可以在下图中显示。

在此处输入图片说明

另一方面,当未选择将鼠标放在其上的节点时,不会发生此问题。突出显示会更改字体的颜色以使其更加可见。可以在下图中显示。

在此处输入图片说明

经过一些研究,我发现通过为SWT.EraseItem事件添加侦听器,我可以修改所选节点的背景颜色,然后禁用选择。这使我可以定义自己的选择背景样式,还可以禁用的SWT.SELECTED标记,以event.detail在未选择节点时强制OS突出显示。

private final class EraseItemListener implements Listener {

    public void handleEvent(Event event) {
        // Only perform the node highlight when it is selected.
        if ((event.detail & SWT.SELECTED) == SWT.SELECTED) {
            // Modify background, emulate Windows highlighting.

            ...

            // Set Windows that we do not want to draw this item as a selection (we have already highlighted the item in our way).
            event.detail &= ~SWT.SELECTED;
        } …
Run Code Online (Sandbox Code Playgroud)

java swt jface treeviewer

5
推荐指数
1
解决办法
1496
查看次数

如何为jface treeviewer创建鼠标右键菜单

我创建了一个TreeViewer使用JFace,但现在我必须向节点添加一个右键单击侦听器.右键单击完成后,必须显示如下菜单:

  1. 做一点事
  2. 没做什么
  3. 删除

我试图这样做,但它抛出一个空指针异常.

MenuManager menuMgr = new MenuManager();
        menuMgr.setRemoveAllWhenShown(true);

        menuMgr.addMenuListener(new IMenuListener() {
            @Override
            public void menuAboutToShow(IMenuManager menuManager) {

                IContributionManager menu = null;
                MenuItem[] items = (MenuItem[]) menu.getItems();
                for (int i = 0; i < items.length; i++)
                    items[i].dispose();

                MenuItem itemCollectionFolder = new MenuItem((Menu) menu, SWT.NONE);
                itemCollectionFolder.setText("Add Something" );

                MenuItem itemNewTestCase = new MenuItem((Menu) menu, SWT.NONE);
                itemNewTestCase.setText("Do Nothing" );

            }
        });

        Control tree = treeViewer.getControl();

        Menu menu = menuMgr.createContextMenu(tree);

        tree.setMenu(menu);
Run Code Online (Sandbox Code Playgroud)

java jface treeviewer e4

3
推荐指数
1
解决办法
3182
查看次数

SWT JFace:如何实现"水平或可扩展的TableViewer"?

我认为这个问题很常见.

最近我有一个要求,我需要做一个水平或可扩展的表格视图.如果您需要一个示例,可以参考Mac OS X的活动监视器: 在表视图中的水平行

与此同时,我在这里尝试了一个例子,它满足了我的要求: SWT一个 http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/SWTTreeWithMulticolumns.htm

但是它有一些问题:1.它使用SWT的Tree类而不是JFace类; 2.我认为它需要重复实现一些JFace查看器类的功能,例如通过单击列标题,过滤器等进行排序.

当我感到绝望时,我发现Eclipse本身有一个完美的视图,它的"问题"视图: Eclipse中的问题视图

所以我认为必须有一种优雅的方式,例如扩展JFace TableViewerTreeViewer类.

但我需要帮助,因为我在谷歌搜索了很多没有好结果.:-(

tree swt jface tableviewer treeviewer

2
推荐指数
1
解决办法
2567
查看次数

在TreeViewer中选择添加的项目

我有和添加按钮,TableViewer在我的应用程序中.按下" 添加"按钮后,我将向模型中添加一个新元素,然后刷新该查看器.

问题是:如何在我的查看器中选择这个新添加的项目?

java swt jface treeviewer

2
推荐指数
1
解决办法
2498
查看次数

setSelectionProvider在两个不同的控件上工作

我正在尝试创建Eclipse插件,它具有两个TreeViewer并排的复合.点击每个TreeViewer内容Eclipse属性视图应该提供适当的信息.现在我想为这个树视图设置选择提供程序,因此我使用了

  setSelectionProvider(treeViewer1)
  setSelectionProvider(treeviewer2)
Run Code Online (Sandbox Code Playgroud)

但是只有第二个添加的树形图才会被设置,因为第一个被覆盖.我正在从Queue.java类开始这两个treeviewer.因此我ISelectionProvider在Queue.java上实现了如下界面:

public void addSelectionChangedListener(ISelectionChangedListener listener)
{
  selectionChangedListeners.add(listener);
}

public void
    removeSelectionChangedListener(ISelectionChangedListener listener)
{
  selectionChangedListeners.remove(listener);
}

private void fireSelectionChanged(final SelectionChangedEvent event)
{
  Object[] listeners = selectionChangedListeners.getListeners();
  for (int i = 0; i < listeners.length; ++i)
  {
     final ISelectionChangedListener l =
         (ISelectionChangedListener) listeners[i];
     Platform.run(new SafeRunnable()
     {
        public void run()
        {
           l.selectionChanged(event);
        }

        @Override
        public void handleException(Throwable e)
        {
           removeSelectionChangedListener(l);
        }
     });
   }
}

   public void setSelection(ISelection selection)
   {
       fireSelectionChanged(new SelectionChangedEvent(this, selection));
    }

     public …
Run Code Online (Sandbox Code Playgroud)

eclipse eclipse-plugin jface treeviewer

1
推荐指数
1
解决办法
581
查看次数

如何在SWT/JFace中设置双击以编辑表格单元格?

是否可以通过双击更改SWT/JFace的默认行为以启用单元格编辑?它现在的方式(单击)很难选择一个表行而不带文本字段.

这是一个自包含的代码段:

package table.editing;

import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

public class TableEditor extends ApplicationWindow {

    class Element {
        private String value;

        public Element(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }
    }

    public TableEditor() {
        super(null);

        setBlockOnOpen(true);
        open();

        Display.getCurrent().dispose();
    }

    protected …
Run Code Online (Sandbox Code Playgroud)

java tree swt jface treeviewer

1
推荐指数
1
解决办法
7186
查看次数

在SWT中向树查看器添加双击扩展

双击树项完全正常,但当我按下键盘上的CTRL + M然后树项展开\折叠,有人可以告诉我这背后的原因吗?这是Eclipse中的错误还是为什么当我按CTRL + M时会触发此双击功能.

谢谢.

java swt treeviewer

1
推荐指数
1
解决办法
2876
查看次数

扩展树节点

我不熟悉RCP,事实上对java也是如此.有一个非常基本的问题.我有一个JFace TreeViewer.我想扩展一个特定的节点.问题是我只有节点的名称.除此之外没有任何信息.我尝试使用treeItem,将其字符串与我拥有的节点名称进行比较,从而得到了节点.我尝试在树的contentprovider中扩展它.但我没有得到理想的输出.当我在日志中检查它时,我得到它被扩展但它没有在查看器中显示.我display.asyncExec在contentprovider 中的方法中执行此操作.

我希望这个问题很清楚.

java jface eclipse-rcp treeviewer

0
推荐指数
1
解决办法
4756
查看次数

java treeviewer添加元素

基本上,我正在使用Java中的Treeviewer(org.eclipse.jface.viewers.TreeViewer)。现在我的问题是,我想向现有结添加一个子元素/项。

首先,我的树看起来像这样:

Knot A
Knot B
Knot C
 >child1
 >child2
Run Code Online (Sandbox Code Playgroud)

这些child(child1,child2)arent是手动添加的,它们是在我接触到树本身之前生成的。

  1. 我创建了treeviewer: viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
  2. 我填充了treeviewer: viewer.setInput(....elements()); 从上面生成状态。

  3. viewer.getTree().getItem(0) 返回我的树的正确结A。

但是我不能在现有的结上添加新的孩子。我尝试了以下操作和其他操作:

TreeItem newItem = new TreeItem(items[0], SWT.NONE); and viewer.add(items[0], newItem); with a newly created item viewer.refresh();

从理论上讲,我可以操作arrayList,它首先会填充treeviewer,但是我认为那真的很糟糕。

我真的不知道我现在在做什么错。我想这是一个很愚蠢的问题。如果是这样,那么我很抱歉。^^

感谢您的帮助,对于您能提供的每一个提示,我深表感谢。

java treeview jface treeviewer

0
推荐指数
1
解决办法
1950
查看次数