22 августа 2008

Tips! События в Java FX

Рассмотрим следующий кусочек кода :
Ellipse
{

centerX: 10, centerY: 10
radiusX: 150, radiusY: 50

stroke: Color.GREEN
onMouseClicked: function( e: MouseEvent ):Void {
// (1)do smth ... }
Если добавить этот код во Frame, будет нарисован эллипс с зелёным ободком, а при нажатии на него клавишей мыши выполниться некоторое действие (1). Но есть существенное НО : нажимать надо не в эллипс , а исключительно на зелёный ободок , что - бы что то произошло. Понятно, что это очень не удобно. Исправить данную "фичу" можно довольно просто:

Ellipse {
centerX: 10, centerY: 10
radiusX: 150, radiusY: 50
stroke: Color.GREEN
fill: Color.WHITE
onMouseClicked: function( e: MouseEvent ):Void { // (1)do smth ... }

Как видите я просто заполнил эллипс белой краской , визуально ничего не изменилось, но все собітия onMouseXxxx будут теперь отрабатывать не только для оботка, но и для всего эллипса.

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

import javafx.application.*;
import javafx.scene.geometry.*;
import javafx.scene.paint.*;
import javafx.input.*;
var Rad:Integer = 10;
Frame {
title: "Test onMouseXx application"
width: 200 height: 200
closeAction: function() {
java.lang.System.exit( 0 );
}
visible: true
stage: Stage
{

content: [
Circle
{

centerX: 100, centerY: 100

radius: bind Rad stroke: Color.GREEN //fill: Color.WHITE onMouseClicked:
function( e: MouseEvent ):Void {
if (Rad == 50)
{
Rad = 10; }
else
{
Rad = 50; }
}

}
]
}

}

Комментариев нет: