JavaFX:可调整大小的矩形:光标渲染

时间:2014-02-27 15:02:52

标签: java javafx javafx-2

我正在创建一个可调整大小的矩形。由于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);
}  
}

0 个答案:

没有答案