質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Q&A

解決済

1回答

3607閲覧

TableViewの複数選択をマウスだけでやりたい

XCUBE

総合スコア101

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

0グッド

0クリップ

投稿2016/08/30 08:37

TableViewを複数選択させるのにCTRLキーを押しながらクリックする必要がありますが、
CTRLキーを押さなくても選択や選択解除したいと思っています。

これを実現するには、何かよい方法はないでしょうか?

CTRLキーを押さなくても選択できるプロパティでもあればいいのですが、
マウスがクリックされるときにCTRLキーを発生させればなんとかなるかなと思ったんですが、
それすら判らず仕舞いです。

できないならできないと判れば気持ちを切替えて代替方法を検討するのですが、
まだ、諦められず質問させていただきました。よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

選択の際に、選択した行を記録しておく方法はどうですか?
別の行が選択されたときに、記録された選択行を選択状態にします。

コード例は、最低限の実装で、動作がエレガントではないのですが、Ctrlキー無しで複数選択はできています。
(追記)setOnMousePressedにするとエレガントでないのが解消されたのでコード例を修正しました。詳しくは、履歴とコメント欄を参照してください。
あと解除のことも考えてません。

  • コード例:選択行を記録して選択状態を自動で復元する

lang

1// javafx.application.Applicationの実装クラス(部分) 2 3// 選択行を記録するConcurrentなSet 4private Set<Integer> selectedIndices = Collections.newSetFromMap(new ConcurrentHashMap<Integer, Boolean>()); 5 6@Override 7public void initialize(URL url, ResourceBundle rb) { 8 TableViewSelectionModel<TableRecord> tableViewSelectionModel = tableView.getSelectionModel(); 9 tableViewSelectionModel.setSelectionMode(SelectionMode.MULTIPLE); 10 tableView.setOnMousePressed(evt -> { 11 // その時選択した行のインデックスを取得 12 ObservableList<Integer> indices = tableViewSelectionModel.getSelectedIndices(); 13 // 以前選択したインデックスを選択状態にする 14 for (Integer index : selectedIndices) { 15 tableViewSelectionModel.select(index); 16 } 17 // 以前選択したインデックスリストに今回の選択を追加 18 for (Integer index : indices) { 19 selectedIndices.add(index); 20 } 21 }); 22 // 以下略 23}

投稿2016/08/30 10:48

編集2016/08/31 16:09
argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

XCUBE

2016/08/30 11:27

argius様 いつもありがとうございます。 ソースまで提示していただいてありがとうございました。 提示していただいたソースで確認しました。やりたかったことはできていました。 ただ、CTRLを押しながらの標準動作と比べると一瞬選択されたものが無効になるので ちょっとチラつき感がなんとかできれば・・・ 選択された行の背景色を変更するような代替方法も調べているのですが、 困ったことがありましたら、また、助けていただければありがたいです。
XCUBE

2016/08/31 04:05

setOnMousePressedでも併用するとチラつき感が消えました。
argius

2016/08/31 04:58

> setOnMousePressedでも併用するとチラつき感が消えました。 それは確認していませんでした。 上手く行ったみたいで良かったです。
argius

2016/08/31 16:05

遅くなりましたが、 むしろsetOnMousePressedだけにしてしまっても良いかも知れませんね。 回答の修正にそれを採用させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問