비행접시
JavaSE 6 update 10 의 새로운 out-of-process 애플릿 플러그인은 여러분이 위젯(widget)들 처럼 브라우저 밖으로 드래그 될수 있는 애플릿들을 작성 가능하게 해줍니다. 그럼에도 여러분은 이 새로운 기능을 사용하여 다른 재미있는 것들을 하기위해서 브라우저를 날뛰는 애플릿을 만들수 있습니다. 이 예제는 여러분에게 브라우저를 벗어나서 잠시동안 주위를 날고 착륙하기 위해서 되돌아가는 비행접시를 어떻게 만드는지 보여줍니다. 주의: 이 샘플은 Java SE 6 update 10 이상이 필요합니다.
| . | . |
코드 이해하기
JavaFX 어플리케이션을 만들기 위해서 특별한 무언가가 필요한 것은 아닙니다. 어떤 어플리케이션 이라도 만약 여러분이 웹페이지에 그것을 놓는다면 애플릿이 될수 있습니다. 그러나 여러분의 어플리케이션을 JavaSE 6 update 10 사용하여 드래그 가능하도록 만들때 Stage 클래스에 AppletStageExtension라고 불리는 특별한 확장기능이 필요하게 됩니다. 이 클래스는 여러분이 여러분의 어플리케이션에 드래그 행위를 커스터마이징 할수 있게 해줍니다.
첫째로 AppletStageExtension 클래스의 인스턴스를 여러분의 어플리케이션의 Stage 클래스 안에 있는 extensions 변수에 놓습니다. 그리고 나서 여러분이 관심을 자지고 있는 AppletStageExtension 함수를 오버라이드 합니다. 이 예제를 위해서 저는 사용자가 마우스 버튼을 누를때 브라우저를 날뛰는 애플릿을 만들기를 원했었습니다. 이 목표를 달성하기 위해서 저는 shouldDragStart 함수를 위한 핸들러를 놓아두었습니다. 이 핸들러는 만약 primaryMouseButton 이 눌러지고 애플릿이 이미 브라우저 밖에 있다면 true를 리턴합니다. 그러한 액션이 가능하기 때문에 저는 Figure 1에서 보여지는 것과 같이 애니메이션을 시작하기 위해서 doFly()를 호출하고 alreadyStarted 를 true로 설정하는 onDragFinished를 위한 핸들러를 놓아두었습니다.
import javafx.stage.Stage;
import javafx.stage.AppletStageExtension;
var alreadyStarted = false;
var stage = Stage {
x: 400
y: 300
width: 200
height: 200
style: StageStyle.TRANSPARENT
scene: Scene {
// the content of your application
}
extensions: [
AppletStageExtension {
shouldDragStart: function(e: MouseEvent): Boolean {
println("should drag start");
return e.primaryButtonDown and not alreadyStarted;
}
//onDragStarted: function(): Void {
// println("drag started");
//}
onDragFinished: function(): Void {
println("drag finished");
alreadyStarted = true;
currentImage = onImage;
doFly(stage.x,stage.y);
}
//onAppletRestored: function(): Void {
// println("restored");
//}
useDefaultClose: false
}
]
}
비행접시 Animate하기
저는 드래그 제스처(gesture)를 시작하거나 applet이 닫혀졌을때를 고려하지 않기 때문에 onDragStarted 나 onAppletRestored 핸들러들을 놓아두지 않았습니다. 여러분이 unset하기를 원하지 않으면 특성을 그대로 두어도 괜찮습니다.
애플릿이 실제로 브라우저 밖으로 나간 후에 doFly() 애니메이션은 여러분이 보는 애니메이션을 생성하기 위해서 단지 시간이 지남에 따라 stage.x 와 stage.y를 이동시키는 것을 양도받습니다.
Josh Marinacci썬마이크로시스템즈의 엔지니어