###前提・実現したいこと
javaFXのListViewで、カーソルを合わせたセルのインデックスを取得する。
###発生している問題
listview.getFocusModel().getFocusedIndex()を用いてセルのインデックスを取得したいのですが、
一度セルのpaneをクリックすればインデックスを取得できるのですが、
paneに設置してあるbuttonが一度セルをクリックせずに押すときちんと動作しません
(セルのインデックスを用いて動作するため)。
なのでセルの上をホバーしたときにインデックスを取得できるようにしたいです。
このような方法はあるのでしょうか。
私の考えている方法で実装できなくても他の方法で
セルのpaneをクリックすることなくインデックスを取得できる方法があるようでしたら
教えてくださるとうれしいです。
~~追記~~
スクリーンショットを載せます。セルの内容は青い四角で隠しています。
カーソルをセルの上でホバーすると出力に
listview.getFocusModel().getFocusedIndex()
が表示されるようにしています。
セルが黒くなっているのがカーソルが合わさっているセルで、
セルが青くなっているのがクリックして選択したセルです。
↑今一番上のセルにマウスを合わせていて、右の出力では‐1になっておりセルの選択ができていません。
↑この画像では一番上のセルをクリックして選択しています。
右の出力が0になっているため、一番上のセルの情報は取得できているのですが
他のセルにカーソルを合わせても0が出力されてしまいます。(他のセルをクリックしてインデックスを取得できていないため)
~~追記~~
ボタン周りのコードです。
lang
1@FXML 2Button button; 3 4@FXML 5static ListCell cell; 6 7@FXML public void sampleButton(ActionEvent e){ 8button.setOnAction(new EventHandler<ActionEvent>() { 9@Override public void handle(ActionEvent e) { 10// getParentを使い、このボタンが含まれるListCellを遡って探す 11Node n = (Node)(e.getSource()); 12while(n != null && !(n instanceof ListCell)) { 13n = n.getParent(); 14} 15if(n != null) { 16// 見つかった場合、 17cell = (ListCell) n; 18System.out.println(cell.getIndex());// ListCell#getIndexで番号が取れる 19num = cell.getIndex(); 20} 21} 22}); 23}
lang
1<?xml version="1.0" encoding="UTF-8"?> 2 3<AnchorPane id="AnchorPane" fx:id="cell" maxHeight="-1.0" 4maxWidth="-1.0" minHeight="-1.0" minWidth="-1.0" prefHeight="90.0" 5prefWidth="500.0" styleClass="cell" xmlns:fx="http://javafx.com/fxml/1" 6xmlns="http://javafx.com/javafx/2.2" fx:controller="application.CellController"> 7<children> 8<Button fx:id="button" layoutX="5.0" layoutY="57.0" maxHeight="25.0" 9maxWidth="25.0" minHeight="20.0" minWidth="20.0" mnemonicParsing="false" 10onAction="#sampleButton" prefHeight="25.0" prefWidth="25.0" 11styleClass="circle-buttonfavo" text="" /> 12</children> 13</AnchorPane> 14
回答1件
あなたの回答
tips
プレビュー