0

この投稿に基づいて、JTable の行をドラッグ アンド ドロップして並べ替える便利な機能を実装しました。ただし、この機能はテーブル全体に関連付けられています。マウス イベントが他の列に影響を与えないように、1 つの列 (アイコンとして表示) にのみ関連付けたいと考えています。

行全体をドラッグ/並べ替えますが、左端または右端の列に表示されるドラッグ用の「ハンドル」として特殊なアイコンを使用したいと考えています。この概念は以前に (Java ではなく) 見たことがありますが、今は適切な例を見つけることができません。

現在、ドラッグ ハンドラは次のようにインストールされています。

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new ReorderRowTransferHandler(table));

ドラッグ ハンドラーを 1 つの列のみにアタッチする方法はありますか?

編集:@Kleopatraの答えは良いですが、私の問題の一部は、ドラッグハンドラーのためにボタンなどのコンポーネントが他の列に含まれているため、「押された」状態が表示されなくなったことです。最初の列に影響を与えるようにドラッグ マウス ハンドラを制限する解決策を見つけたいと思っています。

4

1 に答える 1

2

テーブルの最初の列 (fi) でマウス ドラッグが開始された場合にのみ dnd を開始するには、カスタム TransferHandler の exportAsDrag メソッドを実装して、他の場所では NONE を返します。次のようになります。

@Override
public void exportAsDrag(JComponent comp, InputEvent e, int action) {
    if (e instanceof MouseEvent) {
        MouseEvent mouse = (MouseEvent) e;
        if (table.columnAtPoint(mouse.getPoint()) != 0) {
            action = NONE;
        }

    }
    super.exportAsDrag(comp, e, action);
}
于 2013-08-04T10:14:40.080 に答える