1

現在、Zest を使用してツリーを表示する Eclipse 用のプラグインを開発しています。

MouseListenerダブルクリック機能を追加したかったので、ノードを表示するフィギュアにカスタムを追加しようとしましたが、これはノードをドラッグできるようにする自然に存在する機能を上書きします。

Draw2D ベースのドラッグ機能を追加しようとしましたが、うまくいきませんでした。これが私が試したコードです:

private Point location;

public void mousePressed(MouseEvent me) {
    location = me.getLocation();
    me.consume();
}

public void mouseReleased(MouseEvent me) {
    location = null;
    me.consume();
}

public void mouseDragged(MouseEvent me) {
    if (location == null) {
        return;
    }
    Point moved= me.getLocation();
    if (moved == null) {
        return;
    }

    Dimension offset= moved.getDifference(location);
    if (offset.width == 0 && offset.height == 0) {
        return;
    }
    location= moved;

    UpdateManager uMgr= figure.getUpdateManager();
    LayoutManager lMgr= figure.getLayoutManager();
    Rectangle bounds= figure.getBounds();
    uMgr.addDirtyRegion(figure.getParent(), bounds);
    bounds= bounds.getCopy().translate(offset.width, offset.height);
    lMgr.setConstraint(figure, bounds);
    figure.translate(offset.width, offset.height);
    uMgr.addDirtyRegion(figure.getParent(), bounds);
    me.consume();
}

誰でも私のコードの修正または回避策を提供できますか?

4

1 に答える 1

3

Debug Visualization プロジェクトでは、ドラッグのサポートを維持したまま、ダブルクリック リスナーを追加しました。

コードはhttp://code.google.com/a/eclipselabs.org/p/debugvisualisation/source/browse/hu.cubussapiens.debugvisualisation/src/hu/cubussapiens/debugvisualisation/views/DebugVisualisationView.javaの 159 行にあります。 :

  // double click on nodes
  graphViewer.getGraphControl().addMouseListener(new MouseAdapter() {

          @Override
          public void mouseDoubleClick(MouseEvent e) {
                 toggleOpen.run();
          }
  });

選択したノードを MouseEvent から読み取るか (私が間違っていなければ)、現在の選択を確認することができます (これが、プロジェクトで採用したアプローチです)。

于 2012-07-08T17:46:54.137 に答える