**15.13 (几何问题:是否在矩形内?)
请编写一个程序,绘制一个中心在(100, 60)宽为100而高为40的固定的矩形。当鼠标移动时,显示一条消息表示鼠标指针是否在矩形内,如图15-27b所示。为了检査一个点是否在矩形内,使用定义在 Node 类中的contains方法
这道题的思路和15.12题相似:Java语言程序设计基础篇_编程练习题**15.12(几何问题:是否在圆内)-CSDN博客
-
答题思路
- 新建一个面板Pane(),一个Rectangle(100, 60,100, 40)new一个Text初始设置为空
- 为面板注册一个事件(鼠标移动:setOnMouseMoved())
- 方法一(由于题目已经给出要求,这里只为示例): 手动计算,(x<Rx+(w/2.0)&&x>Rx-(w/2.0))&&(y<Ry+(h/2.0)&&y>Ry-(h/2.0)) 其中x与y为鼠标的位置,Rx与Ry为矩形的中心坐标,w与h是矩形的长与高
- 方法二: 使用Node类中的contains()方法
3.鼠标在矩形内则设置text为“Inside”,不在则设置为"Outside"
4.将text的位置设置为鼠标的位置
代码展示:编程练习题15_13IsItInsideTheRectangle.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.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class 编程练习题15_13IsItInsideTheRectangle extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
Pane pane = new Pane();
Rectangle rectangle = new Rectangle(100, 60, 100, 40);
rectangle.setFill(Color.WHITE);
rectangle.setStroke(Color.BLACK);
Text text = new Text();
pane.getChildren().addAll(rectangle, text);
pane.setOnMouseMoved(e ->{
double x = e.getX();
double y = e.getY();
double rx = rectangle.getX()+rectangle.getWidth()/2.0;
double ry = rectangle.getY()+rectangle.getHeight()/2.0;
double w = rectangle.getWidth();
double h = rectangle.getHeight();
boolean inside = false;
//方法一:手动计算 (由于题目已经给出要求,这里只为示例)
/*if((x<rx+(w/2.0) && x>rx-(w/2.0)) && (y<ry+(h/2.0)&&y>ry-(h/2.0))) {
inside = true;
}else inside = false;
*/
//方法二:contains()方法
if(rectangle.contains(x, y))
inside = true;
else 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_13IsItInsideTheRectangle");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
- 结果展示