私はドラッグドロップターゲットであるListViewを持っています。 OnDragDroppedイベントを処理する際に、マウスの位置にあるリストセルを探したいと思います。さらに、ドラッグドロップ操作中であってもマウスを上に置いたときにアイテムを強調表示したい。これはJavaFxでどのように実現できますか?javafxのドロップ位置の場所にあるListCellを見つける方法
0
A
答えて
0
リストビューのセルファクトリを使用して、カスタムセルを定義します。リストビューではなく個々のセルにドラッグハンドラを登録できます。ドラッグハンドラは、どのセルがイベントを発生させたのかを容易に知ることができます。ここで
はSSCCEです:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.BorderPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class ListViewWithDragAndDrop extends Application {
@Override
public void start(Stage primaryStage) {
ListView<String> listView = new ListView<>();
listView.getItems().addAll("One", "Two", "Three", "Four");
listView.setCellFactory(lv -> {
ListCell<String> cell = new ListCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty) ;
setText(item);
}
};
cell.setOnDragOver(e -> {
Dragboard db = e.getDragboard();
if (db.hasString()) {
e.acceptTransferModes(TransferMode.COPY);
}
});
cell.setOnDragDropped(e -> {
Dragboard db = e.getDragboard();
if (db.hasString()) {
String data = db.getString();
if (cell.isEmpty()) {
System.out.println("Drop on empty cell: append data");
listView.getItems().add(data);
} else {
System.out.println("Drop on "+cell.getItem()+": replace data");
int index = cell.getIndex();
listView.getItems().set(index, data);
}
e.setDropCompleted(true);
}
});
// highlight cells when drag target. In real life, use an external CSS file
// and CSS pseudoclasses....
cell.setOnDragEntered(e -> cell.setStyle("-fx-background-color: gold;"));
cell.setOnDragExited(e -> cell.setStyle(""));
return cell ;
});
TextField textField = new TextField();
textField.setPromptText("Type text and drag to list view");
textField.setOnDragDetected(e -> {
Dragboard db = textField.startDragAndDrop(TransferMode.COPY);
String data = textField.getText();
Text text = new Text(data);
db.setDragView(text.snapshot(null, null));
ClipboardContent cc = new ClipboardContent();
cc.putString(data);
db.setContent(cc);
});
BorderPane root = new BorderPane(listView, textField, null, null, null);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
+0
と、個々の細胞とのハンドラを登録します!私は今夜これを試してみる。ありがとう。 – user3612009
関連する問題
- 1. 場所に位置する境界を見つけるか?
- 2. 場所にあるものを見つける方法は?
- 3. アドレスのある場所を見つける方法?
- 4. ルートに近い上位n個の場所を見つける
- 5. 実行時にマウスの位置を見つける方法は?
- 6. タイムリーにデバイスの場所を見つける方法
- 7. アップグレード中に移動先の場所を見つける方法
- 8. ユーザーの場所を迅速に見つける方法は?
- 9. pdfのテキストのx、yの位置を見つける方法
- 10. ファタフォーマットシーケンスの各塩基の位置を見つける方法
- 11. 階層内のデータアイテムの位置を見つける方法は?
- 12. JavaFXカスタムListCell
- 13. Webブラウザコントロールで要素の位置を見つける方法は?
- 14. テキストカーソルのグローバルな位置を見つける方法は?
- 15. iosでオリジナル画像のピクセル位置を見つける方法
- 16. Html Agility Packでhtmlタグノードの位置を見つける方法
- 17. horizontalScrollViewで最も右の位置を見つける方法
- 18. 選択肢の位置を見つける方法?
- 19. JTextAreaのカーソル位置を見つける方法
- 20. C++でファイルポインタの位置を見つける方法は?
- 21. 回転したテキストの位置を見つける方法は?
- 22. JSとJSON - 位置の数を見つける方法
- 23. アンドロイドでRecyclerの表示位置を見つける方法は?
- 24. ウィンドウ内の絶対NSViewフレーム位置を見つける方法
- 25. 数字の位置を見つけて使用する方法
- 26. InstallShieldのVBScriptカスタムアクションでセットアップ場所を見つける方法は?
- 27. ブラックベリーでデバイスの場所を見つける方法
- 28. スタートアップフォルダの場所をJavaで見つける方法は?
- 29. アンドロイドでビューの場所を見つける方法
- 30. プログラムの場所を見つける方法
の代わりに、リストビュー自体素晴らしい –