1 回答

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也可能會消耗鼠標事件。您需要為每個此類子控件應用與上述類似的內容。
添加回答
舉報