我的任务是编写一个程序,使圆球随着球向右移动而逐渐消失。但这是行不通的,当拖动鼠标但不透明度相同时,我可以使球移动。你们能帮我吗?我不知道如何将不透明度值转换为double
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;
}
}
首先,将绑定移出事件处理程序。绑定将确保centerX
属性更新时始终更新不透明度。
第二,不要设置绑定值;无论如何,事件处理程序的最后两行只是将不透明度设置为其当前值。
第三,不透明度应该在0到1之间。您希望当centerX
为0时为1,而当centerX
为300(或通常是窗格的宽度)时为0。]
您需要的是
opacity = 1 - ball.centerX / root.width = (ball.centerX / root.width) * (-1) + 1
您可以在绑定中表示
ball.centerXProperty() .divide(root.widthProperty() .multiply(-1) .add(1)
因此,您需要:
public Pane createRootPane() {
Circle ball = new Circle (100,50,25);
Pane root = new Pane(ball);
ball.opacityProperty().bind(
ball.centerXProperty()
.divide(root.widthProperty())
.multiply(-1)
.add(1)
);
root.setMinSize(300,300);
root.setOnMouseDragged (
event ->
{
ball.setCenterX(event.getX());
ball.setCenterY(event.getY());
} );
return root;
}