【发布时间】:2020-07-23 14:57:25
【问题描述】:
我的任务是编写一个程序,制作一个随着球向右移动而逐渐消失的圆球。但它不起作用,我可以在拖动鼠标时让球移动但不透明度是一样的。你们能帮帮我吗?我不知道如何将不透明度值转换为双精度
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
public class Project3 extends Application
{
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
Pane root = createRootPane();
Scene scene1 = new Scene(root);
primaryStage.setScene(scene1);
primaryStage.setTitle(" Hai Vo ");
primaryStage.show();
}
public Pane createRootPane()
{
Circle ball = new Circle (100,50,25);
Pane root = new Pane(ball);
root.setMinSize(300,300);
root.setOnMouseDragged (
event ->
{
double x = event.getX();
ball.setCenterX(event.getX());
ball.setCenterY(event.getY());
ball.opacityProperty().bind(ball.centerXProperty());
double opacity = ball.opacityProperty();
ball.setOpacity(opacity);
} );
return root;
}
}
【问题讨论】:
-
在这一行
duble opacity = ball.opacityProperty();,我想你只需要修正拼写,也许可以进行类型转换:double opacity = (double) ball.opacityProperty(); -
哦,是的,我修好了,但是转换的错误还是一样。
-
事件处理程序的最后两行没有任何意义,不管有没有错别字。您绑定了该属性,因此在取消绑定该属性之前无法直接分配值。最有可能你会得到一个完全不透明的圆圈,因为不透明度的范围是
[0,1],并且向右移动会增加 x 值,因此在根据最大 x 值缩放值之后,不透明度也会增加......跨度> -
好吧,对不起,我学的很慢,所以你说我不应该将不透明度与 x 值绑定,因为不透明度在 [0,1] 范围内,而 x 值可以去到无穷远?那你应该如何建议修复它?