我有一個包含矩形的窗格的JavaFX應用程序。這些矩形可以通過拖動鼠標來移動。當超過一半的重疊時突出顯示矩形
當我在另一個矩形上拖動一個矩形時,我想要第二個(背景)矩形突出顯示。這個工程,看下面的代碼
private boolean moveInProgress;
private Point2D prevPos;
public void onMousePressed(MouseEvent event) {
setMouseTransparent(true);
Point2D point = new Point2D(event.getSceneX(), event.getSceneY());
if (!moveInProgress) {
moveInProgress = true;
prevPos = point;
LOG.debug("Mouse move started on location " + prevPos);
}
event.consume();
}
public void onMouseDragged(MouseEvent event) {
if (moveInProgress) {
Point2D point = new Point2D(event.getSceneX(), event.getSceneY());
this.toFront();
double[] translationVector = new double[2];
translationVector[0] = point.getX() - prevPos.getX();
translationVector[1] = point.getY() - prevPos.getY();
setTranslateX(getTranslateX() + translationVector[0]);
setTranslateY(getTranslateY() + translationVector[1]);
prevPos = point;
}
event.consume();
}
public void onMouseReleased(MouseEvent event) {
setMouseTransparent(false);
if (moveInProgress) {
moveInProgress = false;
}
event.consume();
}
public void onDragDetected(MouseEvent event) {
startFullDrag();
event.consume();
}
public void onMouseDragEntered(MouseDragEvent event) {
getStyleClass().add("drag-target");
event.consume();
}
public void onMouseDragExited(MouseDragEvent event) {
if (getStyleClass().contains("drag-target")) {
getStyleClass().remove("drag-target");
}
event.consume();
}
我想強調我的拖動矩形重疊的一半以上時,下面的矩形。在這幅圖中,我想突出顯示紅色的矩形,因爲灰色的矩形重疊了一半以上。
問題是MouseDragEntered和MouseDragExited事件是基於我的鼠標位置觸發的。當我的鼠標位置是圖片中的黑點時,我的鼠標事件只會在我的鼠標進入紅色矩形時觸發。
誰能給我一些指點如何突出在灰色矩形的拖動動作時,紅色矩形,超過一半是重疊?
沒有測試,但是你可以使用'Shape.intersect(Rect1的,RECT2)'得到'Shape'代表的重疊:通話'getBoundsInLocal()'獲取結果的邊界,getWidth()'和getHeight()'得到重疊區域。然後與矩形本身的面積(或者只是寬度或高度,如果需要)進行比較,以查看是否有一半以上是重疊的。 –
@James_D:你打算什麼時候做這些計算?我的問題是,事件進入和退出發生在我的鼠標指針位置。我可以對這些事件何時被解僱有影響嗎? – Aster
是的,這很棘手;你可以只要在'mouseDragged'監聽器中移動矩形時執行計算;或者可以在拖動開始時創建自定義綁定(每個矩形未拖動一個),並在拖動結束時處理它們。 –