**15.12(几何问题:是否在圆内)
请编写一个程序,绘制一个圆心在(100, 60)而半径为50的固定的圆。当鼠标移动时,显示一条消息表示鼠标点是在圆内还是在圆外,如图15-27a所示
-
答题思路:
- 新建一个面板Pane(),一个Circle(100, 60,50)new一个Text初始设置为空
- 为面板注册一个事件(鼠标移动:setOnMouseMoved())
- 设置触发操作
- 方法一:两点距离法,圆中心点和鼠标的距离大于或小于圆的半径
- 方法二:contains方法,使用Node类中的contains方法来判断一个点是否在一个节点中
4. 鼠标在圆内则设置text为“Inside”,不在则设置为"Outside"
5.将text的位置设置为鼠标的位置
代码展示:编程练习题15_12IsItInsideTheCircle.java
package chapter_15;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class 编程练习题15_12IsItInsideTheCircle extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
Pane pane = new Pane();
Circle circle = new Circle(100,60, 50);
circle.setFill(Color.WHITE);
circle.setStroke(Color.BLACK);
double circleX = circle.getCenterX();
double circleY = circle.getCenterY();
Text text = new Text();
pane.getChildren().addAll(circle, text);
pane.setOnMouseMoved(e ->{
double x = e.getX();
double y = e.getY();
boolean inside = false;
//方法一:两点距离法
double distance = Math.abs(Math.sqrt(Math.pow(x-circleX, 2)+Math.pow(y-circleY, 2)));
if(distance < circle.getRadius()) {
inside = true;
}else if(distance > circle.getRadius())
inside = false;
//方法二:contains方法
/*if(circle.contains(x, y))
inside = true;
else if (!circle.contains(x, y))
inside = false;
*/
if(inside) {
text.setText("Inside");
}else text.setText("Outside");
text.setX(x);
text.setY(y);
});
Scene scene = new Scene(pane, 300, 300);
primaryStage.setTitle("编程练习题15_12IsItInsideTheCircle");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
- 结果展示