亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaFX SplitPane 不會冒泡鼠標事件

JavaFX SplitPane 不會冒泡鼠標事件

忽然笑 2022-06-23 17:29:39
我有一個BorderPane. 在此窗格中,我已將幾個控件設置為頂部HBox。在中心我有 eSplitPane有兩個畫布。我想讓鼠標在BorderPane它從SplitPane.如果我使用 asplitPane.setOnMouseMoved(...)我正確地得到了事件。但是 aBorderPane.setOnMouseMoved(...)僅在鼠標懸停在頂部時才有效(如果HBox找到了)。似乎SplitPane正在消耗該事件。誰能證實這一點?如果是這樣,我如何讓偶數冒泡?請注意,當我應用過濾器時,會在BorderPane下降的過程中檢測到偶數。
查看完整描述

1 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

大多數(如果不是全部)皮膚實現擴展SkinBase,默認情況下消耗所有鼠標事件。您可以通過受保護的consumeMouseEvents(boolean)方法進行配置。由于該方法受到保護,您必須對皮膚進行子類化(或使用反射)才能訪問它:


package com.example;


import javafx.scene.control.SplitPane;

import javafx.scene.control.skin.SplitPaneSkin;


public class MySplitPaneSkin extends SplitPaneSkin {


    public MySplitPaneSkin(SplitPane control) {

        super(control);

        consumeMouseEvents(false);

    }


}

皮膚類在 JavaFX 9 中成為公共 API。如果您使用的是 JavaFX 8,則需要擴展內部皮膚類。


然后,您將設置SplitPane.


SplitPane pane = ...;

pane.setSkin(new MySplitPaneSkin(pane));

您還可以通過屬性使用 CSS設置皮膚:-fx-skin


.split-pane {

    -fx-skin: com.example.MySplitPaneSkin;

}

請注意,使用上面的 CSS 將為樣式表覆蓋的所有 SplitPanes 設置外觀(除非您更改它們的樣式類)。您可能希望通過提供您SplitPane的 ID 并使用#id { ... }.


此外,查看SplitPaneSkinJavaFX 11.0.2 中的實現,一個事件處理程序被添加到每個使用所有事件的分隔器。由于這是一個私有實現細節,您無法更改此行為。換句話說,即使使用上面的代碼,BorderPane當鼠標懸停在分隔符上時,鼠標事件也不會冒泡。


要考慮的另一件事是,其中的任何控件SplitPane也可能會消耗鼠標事件。您需要為每個此類子控件應用與上述類似的內容。


查看完整回答
反對 回復 2022-06-23
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號