1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個贊
大多數(shù)(如果不是全部)皮膚實(shí)現(xiàn)擴(kuò)展SkinBase,默認(rèn)情況下消耗所有鼠標(biāo)事件。您可以通過受保護(hù)的consumeMouseEvents(boolean)方法進(jìn)行配置。由于該方法受到保護(hù),您必須對皮膚進(jìn)行子類化(或使用反射)才能訪問它:
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,則需要擴(kuò)展內(nèi)部皮膚類。
然后,您將設(shè)置SplitPane.
SplitPane pane = ...;
pane.setSkin(new MySplitPaneSkin(pane));
您還可以通過屬性使用 CSS設(shè)置皮膚:-fx-skin
.split-pane {
-fx-skin: com.example.MySplitPaneSkin;
}
請注意,使用上面的 CSS 將為樣式表覆蓋的所有 SplitPanes 設(shè)置外觀(除非您更改它們的樣式類)。您可能希望通過提供您SplitPane的 ID 并使用#id { ... }.
此外,查看SplitPaneSkinJavaFX 11.0.2 中的實(shí)現(xiàn),一個事件處理程序被添加到每個使用所有事件的分隔器。由于這是一個私有實(shí)現(xiàn)細(xì)節(jié),您無法更改此行為。換句話說,即使使用上面的代碼,BorderPane當(dāng)鼠標(biāo)懸停在分隔符上時,鼠標(biāo)事件也不會冒泡。
要考慮的另一件事是,其中的任何控件SplitPane也可能會消耗鼠標(biāo)事件。您需要為每個此類子控件應(yīng)用與上述類似的內(nèi)容。
添加回答
舉報(bào)