2012-11-16 3 views
1

события я нашел очень интересную статью о JavFx2 и об этом одинJava FX обработки на линии

http://docs.oracle.com/javafx/2/events/handlers.htm

Я хотел бы знать, как сделать для создания объекта, который расширяет возможности линии, так для вставки управления событиями.

Например, левый щелчок левой кнопкой мыши, двойной щелчок левой кнопкой мыши на нарисованной линии или нажатие клавиши canc с клавиатуры, когда мышь наводится на линию (выбранная строка) или левой кнопкой мыши за пределами строки?

спасибо.

ответ

0

Я просто столкнулся с той же проблемой.

Я хочу иметь «панель чертежей», где я могу разместить вспомогательные линии, которые можно перетаскивать. Вы можете прикрепить MouseHandler через 'setOnMousePressed' и 'setOnMouseDragged', чтобы получить такое поведение.

Но большая проблема заключается в том, что размер линий настолько мал, что вам повезло ударить его мышью.

Вот почему я реализовал это наоборот. Я прикрепляю обработчик мыши к панели рисования и при каждом щелчке мыши я проверяю, находится ли курсор мыши рядом с любой из вспомогательных линий. Это дает мне возможность добавить немного терпимости, поэтому линии можно щелкнуть и перетащить.

Я не могу сказать, является ли самый эффективный способ и будет счастлив, если кто-то еще придумает лучшую идею.

Edit: Тем временем я написал небольшой тест и узнал, что моя первая мысль была не так хорошо.

Моя вторая идея заключалась в том, чтобы обернуть линию в панели и центрировать ее координату y (для вертикальных линий) внутри этой панели. На этой панели я установил обработчики мыши. И так как я сделал панель с предпочтительной высотой 5 пикселей, теперь есть достаточный допуск для курсора мыши, чтобы поймать эту линию.

Если кто-нибудь заинтересован в этой идее, я могу написать небольшой пример кода.

Привет, -chris-

0

Это постоянная проблема при использовании JavaFX. В настоящее время я накладываю все тонкие визуальные эффекты с невидимыми толстыми коллегами и регистрирую слушателей событий на толстых визуальных эффектах.

Например, у вас есть соединение, состоящее из нескольких сегментов линии:

// construct invisible fat lines for selection 
selectionLines.getChildren().clear(); 
for (Node child : connection.getChildren()) { 
    Line line = (Line) child; 
    Line selLine = new Line(line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY()); 
    selLine.setLayoutX(line.getLayoutX()); 
    selLine.setLayoutY(line.getLayoutY()); 
    selLine.setStrokeWidth(SELECTION_LINE_WIDTH); 
    selLine.setStroke(INVISIBLE); 
    selectionLines.getChildren().add(selLine); 
} 
connection.getChildren().add(selectionLines);