Tecnologia JavaFX 1.2: melhorias e recursos
- Nível Iniciante
- Produto JavaFX
- Recursos principais Aperfeiçoamentos em desempenho, gráficos e linguagem
- Última atualização Maio de 2009
O JavaFX 1.2 SDK é uma importante atualização em relação ao JavaFX 1.1 SDK. O JavaFX 1.2 SDK conta com alterações nas APIs que não são compatíveis com versões futuras. Algumas classes, APIs e variáveis foram removidas do JavaFX 1.1 SDK, enquanto que novas classes, APIs e variáveis foram adicionadas ao JavaFX 1.2 SDK.
O JavaFX 1.2 SDK não é compatível com o binário do JavaFX 1.1 SDK. Isso significa que o seu aplicativo e todas as bibliotecas das quais ele depende devem ser recompiladas com o JavaFX 1.2 SDK.
Legenda (Adicionado:
, Removido:
, Alterado:
)
Animação
Pacotes afetados: javafx.animation, javafx.animation.transition
Transition.interpolatese chama agorainterpolator.
Antigo: public override var interpolate = Interpolator.LINEAR;Novo: public override var interpolator = Interpolator.LINEAR;- A classe
Transitionherda da classeTimeline.
- A variável
Transition.durationemSequentialTransitioneParallelTransitionnão está acessível. No entanto, as variáveis protegidas de leitura públicacycleDurationetotalDurationagora estão incluídas naTimeline.

public-read protected var cycleDuration: Duration
public-read protected var totalDuration: Duration
- As variáveis
timelinesnão estão mais incluídas emKeyFrame. As sublinhas de tempo não são mais suportadas. Esta funcionalidade agora é suportada porParallelTransitioneSequentialTransition.
-
A variável
timelineDirtynão está mais incluída na classeTransition. A funçãomarkDirty()oferece o mesmo suporte que a antiga variáveltimelineDirty.timelineDirty, anteriormente uma variável protegida da classeTransition, é agora uma variável local e pode ser modificada através da funçãomarkDirty()na classeTransition. Esta alteração permite que uma biblioteca de terceiros amplie a classe-baseTransitiondo JavaFX para implementar classesTransitionadicionais. As classesTransitionexistentes, comoTranslationTransition,RotateTranslationePathTransition, funcionam como antes.
Antigo: timelineDirty = true;Novo: markDirty()
Operações assíncronas
Pacote afetado: javafx.async
- As classes
AbstractAsyncOperationeRemoteTextDocumentjá não estão incluídas no pacotejavafx.async. A classejavafx.io.http.HttpRequestpode ser usada no lugar da classejavafx.async.RemoteTextDocument.
- As seguintes classes são novas no pacote
javafx.async.
Efeitos
Pacote afetado: javafx.scene.effect
Gráficos
Pacotes afetados: javafx.scene.transform, javafx.scene.image, javafx.ext.swing, javafx.scene, javafx.scene.layout, javafx.stage, javafx.geometry, javafx.scene.paint
- As variáveis dos elementos da matriz na classe
javafx.scene.transform.Affinesão agora denominados da seguinte forma:
m00 --> mxx m01 --> mxy m02 --> tx m10 --> myx m11 --> myy m12 --> ty
No entanto, o caso de uso mais comum do métodoTransform.affinenão foi afetado.
Antigo: Affine { m00: 1 m10: 0 m01: 0 m11: 1 m02: 25 m12: 15 }Novo: Affine { mxx: 1 myx: 0 mxy: 0 myy: 1 tx: 25 ty: 15 } javafx.scene.image.Image.fromBufferedImage(image:java.awt.image.BufferedImage)se chama agorajavafx.ext.swing.SwingUtils.toFXImage(image:java.awt.image.BufferedImage). Os parâmetros e funcionalidade são idênticos ao método antigo.
- O pacote
javafx.sceneoferece suporte às novas classes seguintes:
- O pacote
javafx.geometryoferece suporte às novas classes seguintes:
- Nenhum evento deveria ser entregue quando
Nodeestiver desativado.
- Um aplicativo não deveria esperar eventos com
Nodedesativado. - Os manipuladores de evento de mouse e tecla não deveriam ser chamados quando
Nodeestiver desativado. - Um
Nodecom o foco deveria perder o foco ao estar desativado.
- Um aplicativo não deveria esperar eventos com
- A variável
enableddos componentes do Swing não está mais incluída no pacotejavafx.ext.swing. A variáveldisableainda está disponível e é suficiente para manipular a ativação e desativação de componentes.
- Estão incluídas agora novas variáveis de layout em
javafx.scene.Node,javafx.scene.CustomNodeejavafx.scene.Group:
layoutInfolayoutBoundslayoutXlayoutY
- O método preferencial para posicionar um nó para layout é
layoutXelayoutYem vez detranslateXetranslateY. EmboratranslateXetranslateYprovavelmente funcionem,layoutXelayoutYapresentarão melhor desempenho. Além disso, se fizertranslateXetranslateYlegítimos, o valor original se perde se você não usarlayoutXelayoutY.
- O
layoutBoundspadrão de um Node não inclui clipe, seu efeito nem suas transformações.
- O eixo implícito de um Node ao usar as variáveis
scaleX,scaleYourotatecorresponde ao centro (não transformado) delayoutBounds.
- A variável
boundsInScenejá não está incluída nas classesNode,GroupeCustomNode. A funçãolocalToScene(boundsInLocal)oferece o mesmo suporte que a antiga variávelboundsInScene. A variávelboundsInSceneprejudicava o desempenho computacional e a funçãolocalToScene(boundsInLocal)oferece melhor desempenho porque não é permitida a vinculação à funçãolocalToScene.
Antigo: node.boundsInSceneNovo: node.localToScene(node.boundsInLocal) - O pacote
javafx.scene.layoutinclui agora as seguintes classes.
Para obter mais informações, consulte O que há de novo no JavaFX 1.2: novos layouts e efeitos.
- Uma nova variável
public-read protectedbooleananeedsLayouté herdada da classejavafx.scene.Parentnas classesClipView, Flow, Panel, Stack, Tile, HBoxeVBox.
- Os pacotes
javafx.scene.layout,HBoxeVBox, oferecem agora suporte ao posicionamento do nó dentro do espaço alocado com o uso denodeVPosenodeHPosrespectivamente. No JavaFX SDK 1.1, todos os nós estavam na parte superior doHBoxe à esquerda doVBox.
- Na classe
javafx.scene.layout.Resizable, as variáveispreferredHeightepreferredWidthjá não estão incluídas na classeResizable. As funçõesgetPreferredHeight()egetPreferredWidth()oferecem o mesmo suporte que as antigas variáveispreferredHeightepreferredWeight. As variáveispreferredHeightepreferredWidthagora são variáveis locais e podem ser acessadas através das funções protegidasgetPreferredHeight()egetPreferredWidth()na classeResizable.
Antigo: public-read protected preferredWidth: NumberNovo: protected override bound function getPreferredWidth(): NumberAntigo: public-read protected preferredHeight: NumberNovo: protected override bound function getPreferredHeight(): Number - No JavaFX SDK 1.1, os limites de um filho invisível de um
Group(isto é, um nó filho comvisible: false;) estavam incluídos nos limites deGroup. No JavaFX SDK 1.2, nenhum filho invisível contribui para os limites de seuGrouppai. Se quiser esse comportamento, defina o nó filho como(visible:true; opacity:0;).
- As classes seguintes são novas no
javafx.stage:
- A nova classe
Screentorna obsoleta as propriedadesjavafx.screen.widthejavafx.screen.height.javafx.screen.widthejavafx.screen.heightjá não são suportados dejavafx.FX.getProperty().
- A classe
Screentambém inclui uma propriedadedpipara consulta de tamanho de tela e resolução (DPI).
- A variável
focusedda classejavafx.stage.Stagese chama agoracontainsFocus.
- É ilegal usar um nó em mais de um lugar nos seguintes casos: na sequência de conteúdo de um Group, como o clipe de outro nó ou como valor de retorno da função
CustomNode.create(). Se o tempo de execução do JavaFX 1.2 detecta uma tentativa de uso de um nó em mais de um lugar, ele lançará um exceção e ignorará a tentativa, exceto conforme observado abaixo.
Versões anteriores da tecnologia JavaFX permitiam explicitamente que um nó fosse inserido na sequência de conteúdo de um Group, mesmo se o nó já fosse membro da sequência de conteúdo de outro Group. Quando isso ocorria, o nó era implicitamente removido do outro Group. No tempo de execução do JavaFX 1.2, a adição de um nó a um Group quando este nó já é membro de outro Group agora é considerado ilegal, visto que provavelmente provoca um erro de programação. No entanto, o comportamento de remoção implícita é mantido e uma mensagem de aviso e o rastreamento de pilha da exceção serão exibidos a fim de proporcionar um período de transição do código existente.
- É comum buscar nós nomeados no conteúdo carregado de um arquivo FXZ criado pelo JavaFX Production Suite e colocar esses nós em novos Groups.

var fxdContent = FXDLoader.loadContent("scene.fxz"); var g = Group { content: [ fxdContent.getNode("myNode") ] }
Este código gerará uma mensagem de aviso no JavaFX 1.2 porque o nó recuperado defxdContentjá é membro de um GroupFXDLoadercriado. Para evitar esta mensagem de aviso, remova o nó do Group antigo ante de adicioná-lo no novo. Se estiver usando nós carregados de um arquivo FXZ, você pode usar a classejavafx.fxd.Duplicatorpara copiar os nós, ao invés de movê-los. Também é possível reorganizar a estrutura da arte-final e gerar o arquivo FXZ novamente. Evite fazer manipulações de estruturas gráficas após carregar o arquivo FXZ.
-
O método
fromAWTColornão está mais incluído na classejavafx.scene.paint.Color.
public fromAWTColor(c: java.awt.Color) : Color
- A variável
enabledfoi removida da classejavafx.ext.swing.SwingComponents.
Eventos de mouse e teclado
Pacotes afetados: javafx.scene.control, javafx.ext.swing, javafx.scene.input
- Por padrão, não é possível colocar o foco no
Nodee o manipulador de tecla não é necessário para que oNodereceba o foco com duas exceções:ControleSwingComponentpodem receber o foco por padrão. A nova variávelfocusTraversableestá agora incluída e é booleana. A variávelfocusTraversableespecifica se esteNodedeve fazer parte de um ciclo de foco transversal.

-
A nova variável
sourcede Node está agora incluída na classeMouseEventpara propagação de eventos. A variávelsourceé visualmente o nó mais alto da subárvore de nós no evento do mouse. Nos casos em que o nó for um nó folha, a variávelsourceé a mesma que o nó. Nos casos em que o nó for uma instância de Parent, a variávelsourceé visualmente o nó mais alto da subárvore(@node)no evento do mouse.
- O pacote
javafx.scene.inputinclui agora as seguintes classes.
Alterações da linguagem
-
Consulte Referência à linguagem de programação JavaFX Script.
- Herança múltipla: no JavaFX 1.1, uma classe de JavaFX podia herdar de classes e interfaces, com complexas regras sobre que classes podiam ser herdadas. No JavaFX 1.2, foi adicionado o conceito de uma classe
mixin. As regras de herança incluem agoramixinse, consequentemente, tornaram-se mais simples e um pouco mais restritas. Agora, é possível que uma classe de JavaFX herde apenas de uma classe (não-mixin) e de quaisquer interfaces oumixins. Não é possível instanciar ummixindiretamente.Mixinsparecem classes regulares, mas possuem o modificadormixinem suas declarações. Para obter mais informações, consulte o Tutorial da linguagem JavaFX.
- Agora é necessária uma vírgula em sequências explícitas:

[3, 77, 8]
Mas, assim como o ponto e vírgula, a vírgula também necessária depois de }:
[Foo { x: 14 } Bar { sneeze: "cough" } ]
- A prioridade dos operadores
oreandfoi alterada. O operadoranddo JavaFX tem maior prioridade que o operadoror.
a or b and c
é equivalente a:
a or (b and c)
- Uma
varde um bloco não pode ter o mesmo nome de umavarem um bloco de conteúdo. As estruturas a seguir agora não são permitidas:
public function f() {
var x : Integer;
{
var x : Integer; //compile error
}
}
Ou
for(i in [1..5]) {
for(i in [2..4]) { //compile error
println("Test");
}
}
on replace não é mais permitido em bind.
var x = bind for (i in [0..5]) {
var y = (i mod 2 == 0) on replace { //compile error
println("y changed");
}
y
}
Iterable não são mais permitidos porque não há razão para isso e as atualizações não são vistas. Duration incluem o seguinte: Duration.toMillis()retorna Double em vez de Number.Duration.INDEFINITErepresenta agora um período de tempo desconhecido.Duration.toDate()não é mais suportado.
firstininitintoinverselastonpostinitreplacesteptriggertweenwherewith
Mídia
Pacote afetado: javafx.scene.media
- O suporte ao protocolo de fluxo contínuo em tempo real (RTSP, real-time streaming protocol) é novo. Você pode ler mais sobre o RTSP no wiki do RTSP.

var url: String = "rtsp://sqe-macpro-2.sfbay.sun.com/sample_300kbit.mov";
- A mídia oferece suporte a mais duas plataformas de sistemas operacionais, OpenSolaris e Ubuntu Linux. Ambas as plataformas usam a estrutura multimídia de código-fonte aberto GStreamer.

-
A mídia possui melhor suporte a depuração de vídeos.
Mobile
- O Mobile agora oferece suporte a recorte retangular.

- O vídeo interplataformas (codificação VP6) possui suporte e o FXM/VP6 agora está incluído.

- O Mobile Emulator (somente plataforma Windows) oferece suporte a arquivos de mídia adicionais:

- Os arquivos FXM/FLV, WAV e MIDI agora são suportados por padrão e não são necessários componentes de terceiros.
- Para arquivos MP3 e AMR, é necessário instalar os filtros DirectShow apropriados (um divisor e um decodificador). O K-Lite Codec Pack, por exemplo, contém todos os filtros necessários.
- Para arquivos 3GP, MPEG1, MP4, MOV, é necessário instalar o reprodutor Apple QuickTime. Se nenhum desses formatos funcionar, reinstale o reprodutor Apple QuickTime e reinicie seu computador.
Melhorias no desempenho
-
A implementação subjacente da refatoração de Scene Graph proporciona melhor de desempenho do tempo de execução.

-
O desempenho do tempo de inicialização está melhor em relação ao anterior.

-
As alterações do compilador proporcionam melhor desempenho do tempo de execução.

-
Consulte o artigo Técnicas de aperfeiçoamento do desempenho para aplicativos JavaFX.
Armazenamento persistente
Pacote afetado: javafx.io
Suporte à plataforma
- Agora, o suporte é oferecido a duas plataformas adicionais de sistema operacional:

- Solaris Beta: OpenSolaris 2009.06
- Linux Beta: Ubuntu 8.04 LTE
Production Suite
Pacote afetado: javafx.fxd
-
Agora, o suporte é oferecido ao Adobe Photoshop CS4 e ao Adobe Illustrator CS4.

- No pacote
javafx.fxd, a classeFXDLoaderpossui variáveis e funções adicionais. A classeFXDLoaderherda da classejavafx.async.Taskpara suporte a carregamento em segundo plano de arquivos FXZ/FXD.
- A classe
FXDNodefoi adicionada. A classeUiStubé substituída pela classeFXDNode. Os arquivos UI Stub da classeFXDNode.
- A classe
FXDNodeoferece uma opção de como o conteúdo dos gráficos é carregado: síncrono (que bloqueia outras operações) ou assíncrono (que é executado em segundo plano).
Scene {content: FXDNode {
url: "{__DIR__}mygraphics.fxz"
backgroundLoading: true
placeholder: Text { x: 10 y: 10 content: "Loading graphics ..."}
}
}
_root não está mais incluída na classe FXDContent. A função getRoot() oferece o mesmo suporte que a antiga variável _root. Componentes de controle da IU
Pacote afetado: javafx.scene.control
- O pacote
javafx.scene.controlinclui agora as seguintes classes para criação de controles da IU.
-
Consulte o artigo sobre Controles da IU do JavaFX Scene.
Controlé agora uma classe abstrata e foi significativamente alterada.
- A variável
Behaviorfoi adicionada à classejavafx.scene.control.Skine removida das variáveisfocused,hoverepressed.

- A variável
scenefoi renomeada pornodena classejavafx.scene.control.Skin.
Antigo: public-init protected scene Node
Novo: public-read protected node Node
- A classe
Skiné agora uma classe abstrata e as novas funçõescontains()eintersects()foram adicionadas. Os nomes das funções existentes foram alterados conforme segue abaixo.

- A classe
TextBoxfoi significativamente alterada e uma nova funcionalidade foi adicionada.

| Antigo: | protected computeMaxHeight: Number |
| Novo: | protected getMaxHeight(): Number |
| Antigo: | protected computeMaxWidth(): Number |
| Novo: | protected getMaxWidth(): Number |
| Antigo: | protected computeMinHeight(): Number |
| Novo: | protected getMinHeight(): Number |
| Antigo: | protected computeMinWidth(): Number |
||
| Novo: | protected getMinWidth(): Number |
| Antigo: | protected computePrefHeight(width: Number): Number |
| Novo: |
protected getPrefHeight(width: Number): Number |
| Antigo: | protected computePrefWidth(height: Number): Number |
| Novo: | protected getPrefWidth(height: Number): Number
|
Componentes dos gráficos da IU
Pacotes afetados: javafx.scene.chart, javafx.scene.chart.data, javafx.scene.chart.part
- O novo pacote
javafx.scene.chartinclui agora as seguintes classes para os componentes dos gráficos.
- O novo pacote
javafx.scene.chart.datainclui agora as seguintes classes para os componentes de dados dos gráficos.
- O novo pacote
javafx.scene.chart.partinclui agora as seguintes classes para os componentes das partes dos gráficos.
Serviços Web
Pacotes afetados: javafx.io.http, javafx.data.pull, javafx.data.xml, javafx.data.feed, javafx.data.feed.atom, javafs.data.feed.rss
HttpRequest.enqueue()se chama agoraHttpRequest.start().
HttpRequest.cancel()se chama agoraHttpRequest.stop().
- Estas duas funções públicas não estão mais incluídas:

public function setHeader(name: String, value: String) public function getResponseHeaderNames(): String[]
-
A assinatura destes métodos e campos foi alterada de
IntegerparaLong:
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;
-
A classe
URLConverteragora está incluída no pacotejavafx.io.http.
- O novo pacote
javafx.data.feedinclui as duas classes seguintes:
- O novo pacote
javafx.data.feed.atominclui as classes seguintes:
- O novo pacote
javafx.data.feed.rssinclui as classes seguintes:
Diversos
Pacotes afetados:javafx.util, javafx.data- O novo pacote
javafx.datepossui uma classeDateTime.
- As classes seguintes são novas no pacote
javafx.util:
- O novo pacote
javafx.datainclui as duas seguintes classes:
- O novo pacote
javafx.reflectinclui as duas seguintes classes:
Inyoung Cho Especialista em tecnologia Java, Sun Microsystems