非常に簡単で一般的なことをしたいのですが、JavaFXでそれを行う方法が見つかりません。2つの列を持つTableViewがあり、少なくとも1つの行が選択されている場合にボタンを有効にしたい。行が選択されていない場合は、ボタンを再度無効にします。
そのためには、選択変更イベントなどを取得する必要があります。tableViewのselectionModelをアクションで設定したり、リスナーを追加したりする可能性はありませんか?私は何をしなければなりませんか?
非常に簡単で一般的なことをしたいのですが、JavaFXでそれを行う方法が見つかりません。2つの列を持つTableViewがあり、少なくとも1つの行が選択されている場合にボタンを有効にしたい。行が選択されていない場合は、ボタンを再度無効にします。
そのためには、選択変更イベントなどを取得する必要があります。tableViewのselectionModelをアクションで設定したり、リスナーを追加したりする可能性はありませんか?私は何をしなければなりませんか?
あなたがしたいことは、TableView の選択モデルで選択したインデックスに ListChangeListener を追加することだと思います。それはこのようになるはずです...
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); // just in case you didnt already set the selection model to multiple selection.
tableView.getSelectionModel().getSelectedIndices().addListener(new ListChangeListener<Integer>()
{
@Override
public void onChanged(Change<? extends Integer> change)
{
if (change.getList().size() >= 2)
{
button.setDisable(false);
}
else
{
button.setDisable(true);
}
}
});
私はもともと、ボタンの無効化プロパティを、2 より大きいテーブル ビューで選択されたインデックス プロパティのサイズにバインドすることを提案するつもりでしたが、提供されていないようです。必要に応じて、独自の SimpleIntegerProperty を作成し、リスト変更リスナー内で更新して、ボタンの無効化プロパティを 2 より大きい SimpleIntegerProperty の値にバインドすることができます。この回答がお役に立てば幸いです!
Property を使用した 1 行の別のソリューション:
myButton.disableProperty().bind(myTable.getSelectionModel().selectedItemProperty().isNull());
そうすれば、少なくとも1行が選択されている場合にボタンが有効になります