该代码主要是针对node的mouseTransparentProperty和pickOnBoundsProperty属性。
mouseTransparentProperty为true则该节点及其子节点的鼠标事件无效,也就是说对鼠标透明了。
pickOnBoundsProperty则是计算边界(也就是哪些地方鼠标点击会有效)。默认为false,则边界是几何的边界。为true则是用矩形刚好把几何框起来的边界。
看例子
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ToggleButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
// Demonstrates the JavaFX node mouseTransparent and pickOnBounds properties.
public class LayerClick extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) throws Exception {
ToggleButton testButton = new ToggleButton("");
VBox layer1 = new VBox();
layer1.getChildren().add(testButton);
Node layer2 = new Circle(100, 100, 100, Color.FIREBRICK);
layer2.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
System.out.println("circle click");
}
});
layer2.setOpacity(0.7);
StackPane stack = new StackPane();
stack.getChildren().setAll(layer1, layer2);
stack.setStyle("-fx-background-color: azure;");
VBox layout = new VBox();
layout.getChildren().setAll(
stack,
createControls(testButton, layer2)
);
stage.setScene(new Scene(layout));
stage.show();
}
private VBox createControls(ToggleButton controlledButton, Node controlledNode) {
controlledButton.textProperty().bind(
Bindings
.when(controlledNode.mouseTransparentProperty()).then("Completely Clickable")
.otherwise(Bindings
.when(controlledNode.pickOnBoundsProperty()).then("Not Clickable")
.otherwise("Partially clickable")
)
); //button的text值绑定圆的mouseTransparentProperty和pickOnBoundsProperty
CheckBox enableMouseTransparency = new CheckBox("Enable MouseTransparency");
enableMouseTransparency.setSelected(controlledNode.isMouseTransparent());
controlledNode.mouseTransparentProperty().bind(enableMouseTransparency.selectedProperty());
//圆的mouseTransparentProperty绑定checkbox的选中属性。 mouseTransparentProperty若为true则该节点及其子节点的鼠标事件无效
CheckBox enablePickOnBounds = new CheckBox("Enable Pick On Bounds");
enablePickOnBounds.setSelected(controlledNode.isPickOnBounds());
controlledNode.pickOnBoundsProperty().bind(enablePickOnBounds.selectedProperty());
//圆的pickOnBoundsProperty绑定checkbox的选中属性
VBox controls = new VBox(10);
controls.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;");
controls.getChildren().addAll(
enableMouseTransparency,
enablePickOnBounds
);
return controls;
}
}
当二个属性都没选时,button只有一部分能按动,因为使用的stackpane存放的button和circle,circle在上面,盖住了button的一部分。
当mouseTransparentProperty为true时,此时circle对鼠标透明,所以此时button全都可以按动。
当pickOnBoundsProperty为true时,此时circle鼠标事件响应的边界,变成一个矩形(刚好框住圆形)。而button在矩形范围内,所以此时button完全被circle盖住了,不能点击。
分享到:
相关推荐
这个"JavaFX学习之样例8"可能是一个教程或示例集合,用于教授如何使用JavaFX来创建一个特定的图形元素,比如时钟。在这个例子中,我们可能将学习如何利用JavaFX的图形和动画功能来构建一个可交互的模拟时钟。 首先...
这个名为"javafx2introbyexample"的压缩包包含了《JavaFX 8: Introduction by Example》这本书的示例代码,这本书是学习JavaFX 8编程的一个很好的资源。以下是对这些示例代码所涉及知识点的详细解释: 1. **JavaFX...
运行时还允许你体验官方提供的样例程序,这些样例展示了JavaFX的各种功能,源代码可供学习参考。 在NetBeans环境中配置JavaFX开发环境是另一个关键步骤。JavaFX2.0在Mac系统上的安装提供了更丰富的功能,如高性能...
综上所述,这个压缩包“我的代码样例”提供了丰富的编程实践材料,覆盖了Java API的运用以及完整的图书管理系统开发,对于Java初学者和进阶者都有很大的学习价值。通过分析和学习这些代码,可以提升编程技巧,了解...
在学习JavaFX的过程中,不断尝试、运行样例和构建自己的项目对于掌握JavaFX是非常有帮助的。随着JavaFX 2.0的出现,开发者有了一个功能强大、跨平台的工具来创建高质量的桌面应用程序。通过本教程,你将能够学习到...
总的来说,这个压缩包提供的GUI样例涵盖了基础界面设计、用户认证流程以及基本计算功能的实现,对于学习和掌握GUI编程,尤其是事件驱动编程和用户交互设计,具有很高的参考价值。通过分析和实践这些案例,开发者能够...
学习和使用JFreeChart样例,你可以逐步理解JFreeChart库的工作原理,掌握创建各种复杂图表的方法,并在自己的项目中灵活运用。这对于任何需要在Java环境中处理数据可视化需求的开发者来说,都是一个非常宝贵的资源。
3. **GUI编程**:Java的Swing和JavaFX库允许开发人员创建丰富的图形用户界面。这些库提供了大量的组件,如按钮、文本框、面板等,方便构建桌面应用程序。 4. **数据库操作**:Java JDBC(Java Database ...
本资源“JAVA作业目录及样例”是针对学习Java编程的学生们提供的一份宝贵的参考资料,它包含了Java程序设计实验和半期考试的相关内容,帮助学生理解和实践Java的核心概念。 Java程序设计实验部分通常涉及基本语法、...
【Java学习样例代码】是针对Java编程语言的学习资源,主要包含了各种Java编程示例,旨在帮助初学者或有经验的开发者深入理解Java语言的核心概念和技术。这些代码样例涵盖了从基础语法到高级特性的广泛内容,对于学习...
6. **样例代码**:提供JavaFX示例代码,帮助开发者了解和学习JavaFX API的用法。 7. **语法高亮**:对JavaFX剧本语言(FXML)提供语法高亮和错误检查。 在安装了**e(fx)lipse** 的Eclipse中,用户可以通过“File” ...
3. **异常处理**:Java强制要求捕获异常,样例程序会演示如何使用try-catch-finally语句块处理异常。 4. **集合框架**:Java提供了丰富的集合类,如ArrayList、LinkedList、HashMap等,样例程序会展示如何操作和...
总结来说,`WebViewSample`源码是一个学习JavaFX如何集成Web内容的绝佳实例。通过对源码的深入理解和实践,开发者可以掌握如何在JavaFX应用程序中利用`WebView`组件展示丰富的Web内容,并实现与网页的交互。这不仅...
这里,我们主要关注的是基于Java的开发样例,如在"learn-java-master"这个项目中,开发者可以学习如何使用Java语言来实现智能家居系统的关键部分。 首先,让我们深入了解一下Java在智能家居中的应用。Java是一种...
3. **异常处理**:Java提供了异常处理机制,通过try-catch-finally语句块,可以捕获并处理程序运行过程中的错误,提高程序的健壮性。 4. **集合框架**:包括ArrayList、LinkedList、HashMap等数据结构,以及它们的...
3. **封装**: 封装是面向对象编程的三大特性之一,它隐藏了对象的内部实现细节,只对外提供公共接口。通过访问修饰符(如public、private、protected),可以控制类成员的可见性。 4. **继承与多态**: 继承允许一个...
为了深入理解这个项目,你需要查看源代码,学习其中的类结构、方法实现以及如何通过JavaFX或Swing等库创建图形用户界面。同时,了解如何在Java中实现文件I/O操作,处理系统事件,以及可能涉及的网络通信(如果有的话...
JFreeChart是一个强大的开源库,专门用于生成高质量的2D图表,适用于各种Java应用程序,包括Swing、JavaFX、Applet以及Servlet。本文将深入探讨JFreeChart的基础知识、主要功能以及如何使用它来创建各种类型的图表。...
【Chris-Heavner-Portfolio-1:代码样例】是一个与Java编程相关的项目,它展示了开发者克里斯·海夫纳的编程技能和经验。在这个项目中,我们可以期待找到一系列使用Java语言编写的代码示例,可能包括不同领域的应用,...
3. **异常处理**:Java提供了异常处理机制来捕获和处理程序运行时可能出现的问题。实例中会有涉及try-catch-finally语句块的使用,以及自定义异常的创建,帮助开发者学会优雅地处理错误。 4. **多线程**:Java支持...