我想在JavaFX中制作一个程序,其中包含一个按钮,单击该按钮时,将创建一个圆并将其添加到形状的ArrayList中。以下是我的代码:
createCircleBtn.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Circle circle1 = new Circle();
shapes.add(circle1);
circle1.setCenterX(event.getX());
circle1.setCenterY(event.getY());
circle1.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// doesn't work because "circle1" must be declared final (constant)
circle1.setCenterX(event.getX());
// "this" doesn't refer to "circle1"
this.setCenterY(event.getY());
}
});
mainPane.getChildren().add(circle1);
}
});
我的问题是-如何从内部句柄方法访问“circle1”?在JavaScript中,我们使用e.currentTarget。
我无法声明“Circle1”最终版本,因为我需要在之后更改它。
使用event.getSource(),这样可以为多个cicrles编写一个通用事件处理程序,而不必担心单击了哪一个:
EventHandler<MouseEvent> handler = new EventHandler<>()
{
@Override
public void handle( MouseEvent event )
{
if (event.getSource() instanceof Circle) { // to be on safe side, you may
// remove this if-statement
// if you are sure
Circle c = event.getSource();
c.setCenterX( event.getX() );
}
}
};
// use it on multiple circles
circle1.setOnMouseDragged(handler);
circle2.setOnMouseDragged(handler);
...
circleN.setOnMouseDragged(handler);
在显示的代码中,没有任何地方可以重新指定圆圈1,因此可以将其声明为final:
createCircleBtn.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
final Circle circle1 = new Circle();
shapes.add(circle1);
circle1.setCenterX(event.getX());
circle1.setCenterY(event.getY());
circle1.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
circle1.setCenterX(event.getX());
}
});
mainPane.getChildren().add(circle1);
}
});
请注意,在Java 8中,您的代码将按原样编译,因为圆圈1实际上是最终的(这意味着它只分配了一次,并且永远不会重新分配)。
我正在尝试在javaFx中为特殊需要定制一个快捷方式系统。 这种特殊需求使得不可能使用KeyCombinaison(只限制一个键修饰符是不可接受的)。 我已经做了我适当的KeyCompin联络员系统,现在我想从节点调用一个处理程序(我在控制器之外)。但是我找不到任何优雅的解决方案来执行这个。 有一个按钮声明: 在我想从我的快捷方式代码调用控制器的操作之后。 和标准控制器。 我可以做一些工作,例如使
问题内容: 我在JavaFX中有一个舞台,可以通过多种方式关闭该舞台,方法是单击红色(X)或通过一个调用 无论舞台如何关闭,我都希望在舞台关闭之前(或之后)执行操作。 如果我使用以下代码: 然后当我单击(X)时调用处理程序,但当我调用 不同之处在于,他希望在整个应用程序关闭时调用处理程序,因此可以覆盖的方法。但是,我并没有关闭整个应用程序,只是一个阶段。并且没有重写的方法。 谢谢你的帮助。 问题答
我在JavaFX中有一个阶段,可以通过多种方式关闭,通过单击红色(X)或通过调用的按钮 无论舞台如何关闭,我都想在舞台关闭之前(或关闭时)执行一个动作。 如果我使用以下代码: 然后,当我单击(X)时调用处理程序,但当我调用<code>myStage.close()</code>时不会调用 这与这个问题讨论的问题相同(有一个关键区别):JavaFX:Stage-close-handler 不同之处在
事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一
视图:简单FXML文件 控制器:包含视图中定义的事件处理程序函数,更新表示模型 表示模型:简单数据,包含可观察对象(ObjectProperty、ObservableList等) presenter:包含FXML文件中由fx:id定义的JavaFX节点,将这些节点绑定到表示模型中的可观察对象,并处理其他表示函数,如弹出窗口。这就是JavaFX应用程序。 正如您所注意到的,我的目的是将FXML对象(
问题内容: 我正在用ES6(使用BabelJS)编写一个简单的组件,并且功能无法正常工作。 典型的错误包括类似 无法读取未定义的属性“ setState” 要么 this.setState不是一个函数 你知道为什么吗?这是代码: 问题答案: 在作为prop 传递之前,需要先通过绑定到组件实例,否则函数主体中的变量将不会引用组件实例,而会引用。参见Function :: bind 。 当使用而不是E