2

次のコードがあるとします。

public LSUIEditingPanel(LSView view) {
    super();
    parent     = view;
    controller = view.getController();

    LayoutManager overlay = new OverlayLayout(this);

    setLayout(overlay);
    scribbleArea = new LSScribblePanel();
    scribbleArea.setOpaque(false);
    add(scribbleArea);
    viewArea = new LSCanvasViewport(view);
    add(viewArea);
    setAutoscrolls(true);
    drawListener = new SVGEditorDrawMouseAdaptor();

}

scribbleArea と viewArea はどちらもカス​​タム JPanel です。どちらもメイン パネルに追加されたサブパネルです。

ここで、MouseEvent を親パネル自体に登録できるようにしたいと考えています。これは、親パネルがインスタンス化後に JScrollPane に組み込まれるため、パネルのパンを行うことができるということです。

これは、ドラッグを実行するコード セグメントです。

public class LSPanMouseAdapter extends MouseAdapter {

/**
 * Panning pivot point
 */
private final Point panPoint = new Point();

/**
 * {@inheritDoc}<p>
 * Set pan starting point to be the point where the mouse currently located, and change the
 * current cursor to <code>HAND_CURSOR</code>.
 */
@Override
public void mousePressed(MouseEvent event) {
    JViewport  viewport  = (JViewport) event.getSource();
    JComponent component = (JComponent) viewport.getView();

    panPoint.setLocation(event.getPoint());
    component.setCursor(new Cursor(Cursor.HAND_CURSOR));
}

/**
 * {@inheritDoc}<p>
 * Reset cursor to <code>DEFAULT_CURSOR</code>.
 */
@Override
public void mouseReleased(MouseEvent event) {
    JViewport  viewport  = (JViewport) event.getSource();
    JComponent component = (JComponent) viewport.getView();

    component.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

/**
 * {@inheritDoc}<p>
 * Get the current viewport of the canvas and move the viewable area respective to the
 * event cursor location.
 */
@Override
public void mouseDragged(MouseEvent event) {
    JViewport  viewport     = (JViewport) event.getSource();
    JComponent component    = (JComponent) viewport.getView();
    Point      currentPoint = event.getPoint();
    Point      viewPoint    = viewport.getViewPosition();

    viewPoint.translate(panPoint.x - currentPoint.x, panPoint.y - currentPoint.y);
    component.scrollRectToVisible(new Rectangle(viewPoint, viewport.getSize()));
    panPoint.setLocation(currentPoint);
}
}

イベントを登録しようとしましたが、親パネルがイベントを発生させません。これを行う方法について何か提案はありますか?

4

1 に答える 1