JavaFX Введенная задержка / задержка события мыши - PullRequest
0 голосов
/ 14 сентября 2018

Я создал сетку объектов Rectangle и добавил их в панель.К каждому прямоугольнику прикреплен прослушиватель событий мыши, который запускается триггером MouseEvent.Entered.Обработчик просто меняет цвет прямоугольника, когда пользователь наводит указатель мыши на прямоугольник.Проблема в том, что триггер, кажется, имеет значительную задержку, прежде чем он будет выполнен.Любые идеи, как ускорить это в реальном времени с помощью мыши?

Я загрузил запись здесь: https://screencast -o-matic.com / watch / cFQI0lqdHe

public class WarehouseMap extends Pane {

    private int xSpaces = 200;
    private int ySpaces = 100;
    private ArrayList<Rectangle> gridReferences = new ArrayList<Rectangle> ();

    public WarehouseMap() {
        setWidth(2000);
        setHeight(1000);
        initGrid();
    }

    public void initGrid() {
        double rectWidth = getWidth() / xSpaces;
        double rectHeight = getHeight() / ySpaces;

        for(int x=0; x<xSpaces; x++) {
            for(int y=0; y<ySpaces; y++) { 
                Rectangle gr = new Rectangle(x*rectWidth, y*rectHeight, rectWidth, rectHeight);
                gr.setStroke(Color.GRAY);
                gr.setFill(Color.TRANSPARENT);
                gr.setStrokeWidth(1);
                gr.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent> () {
                    @Override
                    public void handle(MouseEvent event) {
                        gr.setFill(Color.DARKGRAY);
                    }

                });

                gr.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent> () {
                    @Override
                    public void handle(MouseEvent event) {
                        gr.setFill(Color.TRANSPARENT);
                    }

                });

                gridReferences.add(gr);
                this.getChildren().add(gr);
            }
        }
    }
}

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете использовать Canvas для создания более быстрого просмотра:

public class WarehouseCanvasMap extends Pane {
    private int xSpaces = 200;
    private int ySpaces = 100;
    private int cellSize = 10;
    private int lineSize = 1;
    private Canvas canvas;

    public WarehouseCanvasMap() {
        setWidth(xSpaces * cellSize);
        setHeight(ySpaces * cellSize);
        initGrid();
    }

    public void initGrid() {
        canvas = new Canvas();
        canvas.setWidth(getWidth());
        canvas.setHeight(getHeight());
        getChildren().add(canvas);
        GraphicsContext graphic = canvas.getGraphicsContext2D();

        graphic.setStroke(Color.GRAY);
        graphic.setFill(Color.DARKGRAY);
        graphic.setLineWidth(lineSize);

        canvas.setOnMouseMoved(event -> {
            graphic.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());

            graphic.fillRect(event.getX() - event.getX() % cellSize, event.getY() - event.getY() % cellSize, cellSize, cellSize);

            for (int x = 0; x <= xSpaces; x++) {
                graphic.strokeLine(x * cellSize, 0, x * cellSize, canvas.getHeight());
            }
            for (int y = 0; y <= xSpaces; y++) {
                graphic.strokeLine(0, y * cellSize, canvas.getWidth(), y * cellSize);
            }
        });
    }
}

Это решение выглядит так: enter image description here

И выглядит быстрее, чем оригинал: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...