我正在创建一个可调整大小的矩形。由于JavaFX中没有这样的组件(它存在于JFxtras中),我自己创建它作为自定义组件。我希望当鼠标位于其中一条边上时显示光标。但是必须出现正确的光标,当鼠标悬停在左边缘或右边缘时显示Cursor.H_RESIZE
,当鼠标悬停在顶边或底边上时显示Cursor.V_RESIZE
。如果矩形旋转90度并且左侧和右侧现在位于顶部或底部,则情况将更复杂。我的sscce在下面。任何帮助将不胜感激。
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Line;
public class ResizableRectangle extends Pane
{
public ResizableRectangle()
{
top = new Line(10, 110, 210, 110);
bottom = new Line(10, 160, 210, 160);
left = new Line(10, 110, 10, 160);
right = new Line(210, 110, 210, 160);
setDragHandler(left, right, top, bottom);
getChildren().addAll(left, right, top, bottom);
}
private Line top, bottom, left, right;
private void setDragHandler(final Line left, final Line right, final Line top, final Line bottom)
{
setDragHandlers(left);
setDragHandlers(right);
setDragHandlers(top);
setDragHandlers(bottom);
}
private void setDragHandlers(final Line line)
{
line.setOnMouseEntered(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent mouseEvent)
{
line.setCursor(Cursor.H_RESIZE);
}
});
line.setOnMouseExited(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent mouseEvent)
{
line.setCursor(Cursor.NONE);
}
});
}
}
我正在使用以下代码进行测试。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class ResizableRectangleTest extends Application
{
@Override
public void start(Stage stage)
{
Scene scene = new Scene(new Group());
stage.setTitle("Resizable Rectangle Test");
stage.setWidth(500);
stage.setHeight(500);
ResizableRectangle resizableRectangle = new ResizableRectangle();
((Group) scene.getRoot()).getChildren().addAll(resizableRectangle);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args)
{
launch(args);
}
}