0

私は RCP アプリケーションを開発しており、そのために Nebula の NatTable を使用しています。行選択を構成し (DefaultRowSelectionLayerConfiguration を使用)、セル ボタンを構成します (ButtonCellPainter を使用)。両方の ui bing 左マウス ダウン イベント。

私が欲しいのは:

マウスの左ボタンをクリックすると、行全体のボタンが選択されている間にボタンがイベントに応答します。

部品コードの下:

selectionLayer = new SelectionLayer(columnHideShowLayer,false);
selectionLayer.setSelectionModel(new RowSelectionModel<Row>(selectionLayer, bodyDataProvider,
                new IRowIdAccessor<Row>() {
                    @Override
                    public Serializable getRowId(Row rowObject) {
                        return rowObject.getStatus();
                    }
                }));
selectionLayer.addConfiguration(new DefaultRowSelectionLayerConfiguration());


class ButtonClickConfiguration<T> extends AbstractUiBindingConfiguration {

    private final ButtonCellPainter buttonCellPainter;

    public ButtonClickConfiguration(ButtonCellPainter buttonCellPainter) {
        this.buttonCellPainter = buttonCellPainter;
    }

    @Override
    public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
        // Match a mouse event on the body, when the left button is clicked
        // and the custom cell label is present
        CellLabelMouseEventMatcher mouseEventMatcher = new CellLabelMouseEventMatcher(GridRegion.BODY,MouseEventMatcher.LEFT_BUTTON, CUSTOM_CELL_LABEL5);
        // Inform the button painter of the click.
        uiBindingRegistry.registerMouseDownBinding(mouseEventMatcher, this.buttonCellPainter);
    }
}

ソースコードを調査すると、UiBindingRegistry このコードが見つかりました:

プライベート IMouseAction getMouseEventAction(MouseEventTypeEnum mouseEventType, MouseEvent イベント) {

// TODO: This code can be made more performant by mapping mouse bindings
// not only to the mouseEventType but
// also to the region that they are interested in. That way, given an
// area and an event we can narrow down the
// list of mouse bindings that need to be searched. -- Azubuko.Obele

try {
    LinkedList<MouseBinding> mouseEventBindings = this.mouseBindingsMap
            .get(mouseEventType);
    if (mouseEventBindings != null) {
        LabelStack regionLabels = this.natTable.getRegionLabelsByXY(event.x,
                event.y);

        for (MouseBinding mouseBinding : mouseEventBindings) {

            if (mouseBinding.getMouseEventMatcher().matches(this.natTable,
                    event, regionLabels)) {
                return mouseBinding.getAction();
            }
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}
return null;

}

MouseDown イベント bing 2 つのイベントの場合、実行できるのは最初の 1 つだけです。どうすればよいですか? セルボタンを押すアクションのシミュレーションと同時にデータの行を選択する方法を考えることができますが、セルボタンのアクションをシミュレートする方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

1 つのインタラクションで複数のアクションを実行する場合は、必要な両方のアクションを一緒に実行するカスタム アクションを作成する必要があります。

ここでは、選択とメニューを開くためにこれを示しました。NatTable コンテキスト メニューの表示

于 2016-01-28T21:19:49.940 に答える