JavaFX 1.2 기술: 기능 및 개선 사항
- 기술 수준 초보자
- 제품 JavaFX
- 주요 기능 성능, 그래픽, 언어 향상
- 최신 업데이트 2009년 5월
JavaFX 1.2 SDK는 JavaFX 1.1 SDK의 중요 업데이트입니다. JavaFX 1.2 SDK에는 향후 버전과 호환되지 않는 API 변경 사항이 포함되어 있습니다. 일부 클래스, API 및 변수가 JavaFX 1.1 SDK에서 제거되고 최신 클래스, API 및 변수가 JavaFX 1.2 SDK에 추가되었습니다.
JavaFX 1.2 SDK 릴리스는 JavaFX 1.1 SDK와 이진 호환되지 않습니다. 즉, 사용 중인 응용 프로그램과 해당 응용 프로그램에 사용된 라이브러리를 JavaFX 1.2 SDK로 다시 컴파일해야 합니다.
범례(추가됨:
, 제거됨:
, 변경됨:
)
애니메이션
영향을 받는 패키지: javafx.animation, javafx.animation.transition
- 이제
Transition.interpolate의 이름은interpolator입니다.
이전: public override var interpolate = Interpolator.LINEAR;현재: public override var interpolator = Interpolator.LINEAR; Transition클래스는Timeline클래스에서 상속받습니다.
SequentialTransition및ParallelTransition의Transition.duration변수에 액세스할 수 없습니다. 그러나 public-read protected 변수인cycleDuration과totalDuration이Timeline에 포함됩니다.

public-read protected var cycleDuration: Duration
public-read protected var totalDuration: Duration
timelines변수가KeyFrame에 더 이상 포함되지 않습니다. 하위 타임라인이 더 이상 지원되지 않습니다. 이제 이 기능은ParallelTransition및SequentialTransition에서 지원합니다.
-
timelineDirty변수가Transition클래스에 더 이상 포함되지 않습니다.markDirty()함수는 이전의timelineDirty변수와 동일한 지원을 제공합니다. 이전에는Transition클래스의 보호된 변수였던timelineDirty가 이제 로컬 변수이며Transition클래스의 보호된markDirty()함수를 통해 수정할 수 있습니다. 이러한 변경을 통해 타사 라이브러리에서 JavaFXTransition기본 클래스를 확장하여 추가Transition클래스를 구현할 수 있게 되었습니다.TranslationTransition,RotateTranslation및PathTransition과 같은 기존의Transition클래스는 이전과 같이 작동합니다.
이전: timelineDirty = true;현재: markDirty()
비동기 작업
영향을 받는 패키지: javafx.async
AbstractAsyncOperation및RemoteTextDocument클래스는javafx.async패키지에 더 이상 포함되지 않습니다.javafx.io.http.HttpRequest클래스를javafx.async.RemoteTextDocument클래스 대신 사용할 수 있습니다.
- 다음은
javafx.async패키지에 새로 추가된 클래스입니다.
효과
영향을 받는 패키지: javafx.scene.effect
그래픽
영향을 받는 패키지: javafx.scene.transform, javafx.scene.image, javafx.ext.swing, javafx.scene, javafx.scene.layout, javafx.stage, javafx.geometry, javafx.scene.paint
- 이제
javafx.scene.transform.Affine클래스의 매트릭스 요소에 대한 변수 이름이 다음과 같이 변경됩니다.
m00 --> mxx m01 --> mxy m02 --> tx m10 --> myx m11 --> myy m12 --> ty
그러나Transform.affine메소드를 사용하는 일반적인 경우는 영향을 받지 않습니다.
이전: Affine { m00: 1 m10: 0 m01: 0 m11: 1 m02: 25 m12: 15 }현재: Affine { mxx: 1 myx: 0 mxy: 0 myy: 1 tx: 25 ty: 15 } - 이제
javafx.scene.image.Image.fromBufferedImage(image:java.awt.image.BufferedImage)의 이름은javafx.ext.swing.SwingUtils.toFXImage(image:java.awt.image.BufferedImage)입니다. 매개 변수 및 기능은 이전 메소드와 동일합니다.
-
javafx.scene패키지가 다음과 같은 새 클래스를 지원합니다.
-
javafx.geometry패키지가 다음과 같은 새 클래스를 지원합니다.
Node가 비활성화되어 있을 때 이벤트가 전달되어서는 안 됩니다.
- 응용 프로그램은 비활성화된
Node에서 이벤트를 예상해서는 안 됩니다. Node가 비활성화되어 있을 때 마우스 및 키 이벤트 처리기를 호출해서는 안 됩니다.- 포커스가 있는
Node가 비활성화되면 포커스를 잃게 됩니다.
- 응용 프로그램은 비활성화된
- Swing 구성 요소의
enabled변수가javafx.ext.swing패키지에 더 이상 포함되지 않습니다.disable변수는 계속 사용할 수 있으며 구성 요소의 활성화 및 비활성화를 충분히 처리할 수 있습니다.
- 이제 새로운 레이아웃 변수가
javafx.scene.Node,javafx.scene.CustomNode및javafx.scene.Group에 포함됩니다.
layoutInfolayoutBoundslayoutXlayoutY
- 레이아웃에 대한 노드를 배치하는 기본 메소드로는
translateX및translateY대신layoutX및layoutY가 사용됩니다.translateX및translateY도 작동하지만layoutX및layoutY의 성능이 더 뛰어납니다. 또한layoutX및layoutY를 사용하지 않았을 경우 적합한translateX및translateY에 정당성을 부여하면 원래 값이 손실됩니다.
- Node의 기본
layoutBounds에 클립, 효과 또는 모든 변환이 포함되지 않습니다.
scaleX,scaleY또는rotate변수를 사용할 경우 Node의 암시적 피벗은layoutBounds의 변환되지 않은 중심입니다.
boundsInScene변수가Node,Group및CustomNode클래스에 더 이상 포함되지 않습니다.localToScene(boundsInLocal)함수가 이전boundsInScene변수와 동일한 지원을 제공합니다.boundsInScene변수는 계산 비용이 많이 들고localToScene(boundsInLocal)함수는localToScene함수에 대한 바인딩을 허용하지 않기 때문에 더 뛰어난 성능을 제공합니다.
이전: node.boundsInScene현재: node.localToScene(node.boundsInLocal)- 이제
javafx.scene.layout패키지에는 다음과 같은 클래스가 포함됩니다.
자세한 내용은 JavaFX 1.2의 새로운 기능: 새 레이아웃 및 효과를 참조하십시오.
- 새로운 부울
public-read protected변수needsLayout이ClipView, Flow, Panel, Stack, Tile, HBox및VBox클래스의javafx.scene.Parent클래스에서 상속받습니다.
- 이제
javafx.scene.layout패키지,HBox및VBox에서 각각nodeVPos및nodeHPos를 사용하여 할당된 공간 내에 노드를 배치할 수 있습니다. JavaFX SDK 1.1에서는 모든 노드가HBox의 경우 맨 위에,VBox의 경우 왼쪽에 배치되었습니다.
javafx.scene.layout.Resizable클래스에서preferredHeight및preferredWidth변수가 더 이상Resizable클래스에 포함되지 않습니다.getPreferredHeight()및getPreferredWidth()함수는 이전preferredHeight및preferredWeight변수와 동일한 지원을 제공합니다. 이제preferredHeight및preferredWidth는 지역 변수이며Resizable클래스의 보호getPreferredHeight()및getPreferredWidth()함수를 통해 액세스할 수 있습니다.
이전: public-read protected preferredWidth: Number현재: protected override bound function getPreferredWidth(): Number이전: public-read protected preferredHeight: Number현재: protected override bound function getPreferredHeight(): Number- JavaFX SDK 1.1에서는
Group의 숨겨진 자식 바운드(즉,visible: false;인 자식 노드)가Group의 바운드에 포함되었습니다. JavaFX SDK 1.2에서는 모든 숨겨진 자식이 부모Group의 바운드에 영향을 주지 않습니다. 이 동작을 원하는 경우 자식 노드를(visible:true; opacity:0;)으로 설정하십시오.
- 다음은
javafx.stage에 새로 추가된 클래스입니다.
- 새로운
Screen클래스로 인해javafx.screen.width및javafx.screen.height등록 정보를 사용할 수 없게 되었습니다.javafx.screen.width및javafx.screen.height가javafx.FX.getProperty()에서 더 이상 지원되지 않습니다.
Screen클래스에는 화면 크기 및 해상도(DPI)를 쿼리하는dpi등록 정보도 포함됩니다.
- 이제
javafx.stage.Stage클래스의focused변수 이름이containsFocus입니다.
- Group의 컨텐트 시퀀스에서 다른 노드의 클립으로 또는
CustomNode.create()함수의 반환값으로 둘 이상의 위치에서 노드를 사용하지 않는 것이 좋습니다. JavaFX 1.2 런타임에서 노드를 둘 이상의 위치에 사용하려는 시도를 감지하면 예외가 발생하고 시도를 무시합니다. 단, 아래에서 설명하는 경우는 예외입니다.
이전 릴리스의 JavaFX 기술에서는 노드가 이미 다른 Group 컨텐트 시퀀스의 구성원인 경우에도 노드를 Group의 컨텐트 시퀀스에 삽입되는 것을 명시적으로 허용했습니다. 이런 경우 노드는 다른 Group에서 암시적으로 제거됩니다. JavaFX 1.2 런타임에서는 노드가 이미 다른 Group의 구성원일 경우 Group에 노드를 추가하면 프로그래밍 오류가 발생할 가능성이 높기 때문에 잘못된 것으로 간주합니다. 그러나 암시적 제거 동작은 유지되며, 기존 코드를 전환할 시간을 제공하기 위해 경고 메시지 및 예외 스택 추적이 인쇄됩니다.
- 일반적으로 JavaFX 제품군으로 작성한 FXZ 파일에서 로드된 컨텐트에서 명명된 노드를 가져오고 이러한 노드를 새 Group에 배치합니다.

var fxdContent = FXDLoader.loadContent("scene.fxz"); var g = Group { content: [ fxdContent.getNode("myNode") ] }
이 코드를 실행하면fxdContent에서 가져온 노드가 이미FXDLoader를 작성한 Group의 구성원이기 때문에 JavaFX 1.2에서 경고 메시지가 생성됩니다. 이러한 경고 메시지가 표시되지 않도록 하려면 새 Group에 노드를 추가하기 전에 이전 Group에서 노드를 제거하십시오. FXZ 파일에서 로드된 노드를 사용하고 있는 경우javafx.fxd.Duplicator클래스를 사용하여 노드를 이동하지 않고 복사할 수 있습니다. 또는 아트 작업의 구조를 재배열하고 FXZ 파일을 재생성할 수 있습니다. FXZ 파일을 로드한 후 장면 그래프를 조작하지 마십시오.
-
fromAWTColor메소드가javafx.scene.paint.Color클래스에 더 이상 포함되지 않습니다.
public fromAWTColor(c: java.awt.Color) : Color
enabled변수는javafx.ext.swing.SwingComponents클래스에서 제거되었습니다.
키보드 및 마우스 이벤트
영향을 받는 패키지: javafx.scene.control, javafx.ext.swing, javafx.scene.input
- 기본적으로
Node는 포커스를 받을 수 없으며Node가 포커스를 받기 위해 키 처리기가 필요하지 않습니다. 단,Control및SwingComponent는 기본적으로 포커스를 받습니다. 이제 새로운focusTraversable변수가 포함되며 이 변수는 부울입니다.focusTraversable변수는 이Node가 포커스 순회 주기의 일부가 될지 여부를 지정합니다.

-
이제 새로운
source변수 Node가 이벤트 버블링에 대한MouseEvent클래스에 포함됩니다.source변수는 마우스 이벤트 아래의 노드 하위 트리에서 시각적으로 최상위 노드입니다. 노드가 최하위 노드일 경우source변수는 노드와 동일합니다. 노드가 부모의 인스턴스일 경우source변수는 마우스 이벤트 아래의(@node)하위 트리에서 시각적으로 최상위 노드입니다.
- 이제
javafx.scene.input패키지에는 다음과 같은 클래스가 포함됩니다.
언어 변경 사항
-
JavaFX 스크립트 프로그래밍 언어 참조를 참조하십시오.
- 다중 상속: JavaFX 1.1에서 JavaFX 클래스는 상속받을 수 있는 클래스에 대한 복잡한 규칙을 사용하여 클래스 및 인터페이스에서 상속받을 수 있습니다. JavaFX 1.2에서는
mixin클래스 개념이 추가되었습니다. 이제 상속 규칙에mixins가 포함되어 규칙이 간단해지고 제한이 완화되었습니다. 이제 JavaFX 클래스는 최대 하나의 클래스(비mixin) 및 여러 인터페이스나mixins에서 상속받을 수 있습니다.mixin은 직접 인스턴스화할 수 없습니다.Mixins는 일반 클래스처럼 보이지만 선언에mixin수정자가 있습니다. 자세한 내용은 JavaFX 언어 자습서를 참조하십시오.
- 이제 명시적 시퀀스에 쉼표가 필요합니다.

[3, 77, 8]
그러나 세미콜론처럼 } 뒤에는 쉼표가 필요하지 않습니다.
[Foo { x: 14 } Bar { sneeze: "cough" } ]
or연산자와and연산자의 우선 순위가 변경되었습니다. JavaFXand연산자의 우선 순위가or연산자보다 높습니다.
a or b and c
다음과 동일한 의미임:
a or (b and c)
- 블록의
var에는 포함하는 블록의var와 동일한 이름을 지정할 수 없습니다. 이제 다음과 같은 경우는 허용되지 않습니다.
public function f() {
var x : Integer;
{
var x : Integer; //compile error
}
}
또는
for(i in [1..5]) {
for(i in [2..4]) { //compile error
println("Test");
}
}
on replace 트리거가 bind 내에서 더 이상 허용되지 않습니다.
var x = bind for (i in [0..5]) {
var y = (i mod 2 == 0) on replace { //compile error
println("y changed");
}
y
}
Iterable을 통한 for 루프 바운드는 적절하지 않고 업데이트가 표시되지 않으므로 더 이상 허용되지 않습니다. Duration의 변경 사항은 다음과 같습니다. Duration.toMillis()는 숫자 대신 Double을 반환합니다.Duration.INDEFINITE는 이제 알 수 없는 길이의 기간을 나타냅니다.Duration.toDate()는 더 이상 지원되지 않습니다.
firstininitintoinverselastonpostinitreplacesteptriggertweenwherewith
매체
영향을 받는 패키지: javafx.scene.media
- RTSP(Real-time streaming protocol) 지원은 새로운 기능입니다. RTSP에 대한 자세한 내용은 RTSP 위키를 참조하십시오.

var url: String = "rtsp://sqe-macpro-2.sfbay.sun.com/sample_300kbit.mov";
- 매체는 두개의 추가 OS 플랫폼, OpenSolaris 및 Ubuntu Linux를 지원합니다. 두 플랫폼 모두 오픈 소스 멀티미디어 프레임워크 GStreamer를 사용합니다.

-
매체에서는 향상된 비디오 스크러빙에 대한 지원을 제공합니다.
모바일
- 이제 모바일에서 사각형 자르기를 지원합니다.

- 교차 플랫폼 비디오(VP6 인코딩)가 지원되며 FXM/VP6이 포함되었습니다.

- Mobile Emulator(Windows 플랫폼 전용)에서는 추가 매체 파일을 지원합니다.

- 이제 FXM/FLV, WAV 및 MIDI 파일이 기본적으로 지원되며 타사 구성 요소가 필요하지 않습니다.
- MP3 및 AMR 파일의 경우 적절한 DirectShow 필터(스플리터 및 디코더)를 설치해야 합니다. 예를 들어 K-Lite Codec Pack에는 필요한 필터가 모두 들어 있습니다.
- 3GP, MPEG1, MP4, MOV 파일의 경우 Apple QuickTime 플레이어를 설치해야 합니다. 이러한 형식이 작동하지 않는 경우 Apple QuickTime 플레이어를 다시 설치하고 컴퓨터를 다시 시작하십시오.
성능 향상
-
장면 그래프 리팩토링의 기본 구현에서 향상된 런타임 성능을 제공합니다.

-
시작 시간 성능이 이전 시작 시간 성능에 비해 향상되었습니다.

-
컴파일러 변경으로 런타임 성능이 향상되었습니다.

-
JavaFX 응용 프로그램의 성능 향상 기술에 대한 문서를 참조하십시오.
영구 저장소
영향을 받는 패키지: javafx.io
플랫폼 지원
- 이제 두 개의 추가 OS 플랫폼이 지원됩니다.

- Solaris 베타: OpenSolaris 2009.06
- Linux 베타: Ubuntu 8.04 LTE
제품군
영향을 받는 패키지: javafx.fxd
-
이제 Adobe Photoshop CS4 및 Adobe Illustrator CS4가 지원됩니다.

javafx.fxd패키지의FXDLoader클래스에는 추가 변수 및 함수가 있습니다.FXDLoader클래스는javafx.async.Task클래스에서 상속받아 FXZ/FXD 파일의 백그라운드 로드를 지원합니다.
-
FXDNode클래스가 추가되었습니다.UiStub클래스는FXDNode클래스로 대체되었습니다. 이제 UI 스텁 파일은FXDNode클래스에서 확장됩니다.
FXDNode클래스에서는 그래픽 컨텐트가 로드되는 방식을 동기식(다른 작업 차단) 또는 비동기식(백그라운드에서 실행)에서 선택할 수 있습니다.
Scene {content: FXDNode {
url: "{__DIR__}mygraphics.fxz"
backgroundLoading: true
placeholder: Text { x: 10 y: 10 content: "Loading graphics ..."}
}
}
_root 변수는 FXDContent 클래스에 더 이상 포함되지 않습니다. getRoot() 함수는 이전 _root 변수와 동일한 지원을 제공합니다. UI 컨트롤 구성 요소
영향을 받는 패키지: javafx.scene.control
- 이제
javafx.scene.control패키지에 다음과 같은 UI 컨트롤 작성 클래스가 포함됩니다.
-
JavaFX 화면 UI 컨트롤에 대한 문서를 참조하십시오.
- 이제
Control은 추상 클래스이며 현저하게 변경되었습니다.
Behavior변수는focused,hover및pressed변수가 제거된javafx.scene.control.Skin클래스에 추가되었습니다.

javafx.scene.control.Skin에서는scene변수의 이름이node로 변경되었습니다.
이전: public-init protected scene Node
현재: public-read protected node Node
- 이제
Skin클래스는 추상 클래스이며 새로운contains()및intersects()함수가 추가되었습니다. 기존 함수 이름은 다음과 같이 변경되었습니다.

TextBox클래스가 현저하게 변경되어 새 기능이 추가되었습니다.

| 이전: | protected computeMaxHeight: Number |
| 현재: | protected getMaxHeight(): Number |
| 이전: | protected computeMaxWidth(): Number |
| 현재: | protected getMaxWidth(): Number |
| 이전: | protected computeMinHeight(): Number |
| 현재: | protected getMinHeight(): Number |
| 이전: | protected computeMinWidth(): Number |
||
| 현재: | protected getMinWidth(): Number |
| 이전: | protected computePrefHeight(width: Number): Number |
| 현재: |
protected getPrefHeight(width: Number): Number |
| 이전: | protected computePrefWidth(height: Number): Number |
| 현재: | protected getPrefWidth(height: Number): Number
|
UI 차트 구성 요소
영향을 받는 패키지: javafx.scene.chart, javafx.scene.chart.data, javafx.scene.chart.part
- 이제 새로운
javafx.scene.chart패키지에 다음과 같은 차트 구성 요소 클래스가 포함됩니다.
- 이제 새로운
javafx.scene.chart.data패키지에 다음과 같은 차트 데이터 구성 요소 클래스가 포함됩니다.
- 이제 새로운
javafx.scene.chart.part패키지에 다음과 같은 차트 부품 구성 요소 클래스가 포함됩니다.
웹 서비스
영향을 받는 패키지: javafx.io.http, javafx.data.pull, javafx.data.xml, javafx.data.feed, javafx.data.feed.atom, javafs.data.feed.rss
- 이제
HttpRequest.enqueue()의 이름이HttpRequest.start()입니다.
- 이제
HttpRequest.cancel()의 이름이HttpRequest.stop()입니다.
- 다음 두 공개 함수가 더 이상 포함되지 않습니다.

public function setHeader(name: String, value: String) public function getResponseHeaderNames(): String[]
-
이러한 메소드 및 필드의 서명이
Integer에서Long으로 변경되었습니다.
public-read protected var towrite: Long; public-read protected var toread: Long; public-read protected var written: Long; public-read protected var read: Long; public var onToWrite: function(bytes: Long): Void = null; public var onToRead: function(bytes: Long): Void = null; public var onWritten: function(bytes: Long): Void = null; public var onRead: function(bytes: Long): Void = null;
-
이제
URLConverter클래스가javafx.io.http패키지에 포함됩니다.
- 새로운
javafx.data.feed패키지에 다음과 같은 두 클래스가 포함됩니다.
- 새로운
javafx.data.feed.atom패키지에 다음과 같은 클래스가 포함됩니다.
- 새로운
javafx.data.feed.rss패키지에 다음과 같은 클래스가 포함됩니다.
기타
영향을 받는 패키지:javafx.util, javafx.data- 새로운
javafx.date패키지에DateTime클래스가 있습니다.
- 다음은
javafx.util패키지에 새로 추가된 클래스입니다.
- 새로운
javafx.data패키지에 다음과 같은 두 클래스가 포함됩니다.
- 새로운
javafx.reflect패키지에 다음과 같은 두 클래스가 포함됩니다.
Sun Microsystems Java 기술 컨설턴트 Inyoung Cho