これを行う方法はまったくありませんが、たとえばSplitPane
のCSS lookupを使用して可能です。
除算器のCSSクラスがsplit-pane-divider
であるため、シーングラフから仕切りを得ることができ、実際にはStackPane
のインスタンスになります。
これらのStackPane
では、マウスの押したイベントリスナーとマウスのリリースイベントリスナーを登録し、その時点でディバイダが「ドラッグ中」であることを示すクラスメンバを更新できます。 positionプロパティリスナーでは、このクラスメンバをチェックすることができます。これが真の場合は、ディバイダがマウスによって移動されていることを意味します。そうでない場合、変更は無視されます。
例:
public class Main extends Application {
// Indicates that the divider is currently dragged by the mouse
private boolean mouseDragOnDivider = false;
@Override
public void start(Stage primaryStage) throws Exception{
SplitPane sp = new SplitPane();
sp.getItems().addAll(new StackPane(), new StackPane());
sp.setDividerPositions(0.3f);
// Listen to the position property
sp.getDividers().get(0).positionProperty().addListener((obs, oldVal, newVal) -> {
if(mouseDragOnDivider)
System.out.println("It's a mouse drag to pos: " + newVal.doubleValue());
});
primaryStage.setScene(new Scene(sp, 300, 275));
sp.requestLayout();
sp.applyCss();
// For each divider register a mouse pressed and a released listener
for(Node node: sp.lookupAll(".split-pane-divider")) {
node.setOnMousePressed(evMousePressed -> mouseDragOnDivider = true);
node.setOnMouseReleased(evMouseReleased -> mouseDragOnDivider = false);
}
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
注: レイアウトが作成され、CSSが適用されている場合、ルックアップはのみ動作としては、それゆえ、requestLayout()
とapplyCss()
メソッドがすでに実行されていることが重要ですまた、SplitPane
が既にシーングラフ(Scene
に添付)に追加されていることが必要です。
ここで大きな画像は何ですか?ウィンドウの大きさが変わるたびにスライダも動きます。なぜあなたはそれをドラッグするユーザーについて知りたいのですか? –