Tecnologia JavaFX 1.2: melhorias e recursos

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: ícone de Adicionar, Removido: ícone de Remover, Alterado: ícone de Alterado)


Animação

Pacotes afetados: javafx.animation, javafx.animation.transition

  • Transition.interpolate se chama agora interpolator. ícone de Alterado

    Antigo: public override var interpolate = Interpolator.LINEAR;
    Novo:   public override var interpolator = Interpolator.LINEAR;
  • A classe Transition herda da classe Timeline. ícone de Alterado

  • A variável Transition.duration em SequentialTransition e ParallelTransition não está acessível. No entanto, as variáveis protegidas de leitura pública cycleDuration e totalDuration agora estão incluídas na Timeline. ícone de Remover ícone de Adicionar

    public-read protected var cycleDuration: Duration
    public-read protected var totalDuration: Duration

  • As variáveis timelines não estão mais incluídas em KeyFrame. As sublinhas de tempo não são mais suportadas. Esta funcionalidade agora é suportada por ParallelTransition e SequentialTransition. ícone de Remover

  • A variável timelineDirty não está mais incluída na classe Transition. A função markDirty() oferece o mesmo suporte que a antiga variável timelineDirty . timelineDirty, anteriormente uma variável protegida da classe Transition, é agora uma variável local e pode ser modificada através da função markDirty() na classe Transition. Esta alteração permite que uma biblioteca de terceiros amplie a classe-base Transition do JavaFX para implementar classes Transition adicionais. As classes Transition existentes, como TranslationTransition, RotateTranslation e PathTransition, funcionam como antes. Renomear

    Antigo: timelineDirty = true;
    Novo:   markDirty()

Operações assíncronas

Pacote afetado: javafx.async

  • As classes AbstractAsyncOperation e RemoteTextDocument já não estão incluídas no pacote javafx.async. A classe javafx.io.http.HttpRequest pode ser usada no lugar da classe javafx.async.RemoteTextDocument. ícone de Remover

  • As seguintes classes são novas no pacote javafx.async. ícone de Adicionar


Efeitos

Pacote afetado: javafx.scene.effect

  • As seguintes classes são novas no pacote javafx.scene.effect. ícone de Adicionar


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.Affine são agora denominados da seguinte forma: ícone de Alterado

        m00 --> mxx
        m01 --> mxy
        m02 --> tx
        m10 --> myx
        m11 --> myy
        m12 --> ty

    No entanto, o caso de uso mais comum do método Transform.affine nã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 agora javafx.ext.swing.SwingUtils.toFXImage(image:java.awt.image.BufferedImage). Os parâmetros e funcionalidade são idênticos ao método antigo. ícone de Alterado

  • O pacote javafx.scene oferece suporte às novas classes seguintes: ícone de Adicionar


  • O pacote javafx.geometry oferece suporte às novas classes seguintes: ícone de Adicionar


  • Nenhum evento deveria ser entregue quando Node estiver desativado. ícone de Alterado

    • Um aplicativo não deveria esperar eventos com Node desativado.
    • Os manipuladores de evento de mouse e tecla não deveriam ser chamados quando Node estiver desativado.
    • Um Node com o foco deveria perder o foco ao estar desativado.

  • A variável enabled dos componentes do Swing não está mais incluída no pacote javafx.ext.swing . A variável disable ainda está disponível e é suficiente para manipular a ativação e desativação de componentes. ícone de Remover

  • Estão incluídas agora novas variáveis de layout em javafx.scene.Node, javafx.scene.CustomNode e javafx.scene.Group: ícone de Adicionar

    • layoutInfo
    • layoutBounds
    • layoutX
    • layoutY

  • O método preferencial para posicionar um nó para layout é layoutX e layoutY em vez de translateX e translateY. Embora translateX e translateY provavelmente funcionem, layoutX e layoutY apresentarão melhor desempenho. Além disso, se fizer translateX e translateY legítimos, o valor original se perde se você não usar layoutX e layoutY. ícone de Adicionar

  • O layoutBounds padrão de um Node não inclui clipe, seu efeito nem suas transformações. Renomear

  • O eixo implícito de um Node ao usar as variáveis scaleX, scaleY ou rotate corresponde ao centro (não transformado) de layoutBounds. Renomear

  • A variável boundsInScene já não está incluída nas classes Node, Group e CustomNode. A função localToScene(boundsInLocal) oferece o mesmo suporte que a antiga variável boundsInScene. A variável boundsInScene prejudicava o desempenho computacional e a função localToScene(boundsInLocal) oferece melhor desempenho porque não é permitida a vinculação à função localToScene. Renomear

    Antigo: node.boundsInScene
    Novo:   node.localToScene(node.boundsInLocal)
  • O pacote javafx.scene.layout inclui agora as seguintes classes. ícone de Adicionar


    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 protected booleana needsLayout é herdada da classe javafx.scene.Parent nas classes ClipView, Flow, Panel, Stack, Tile, HBox e VBox. ícone de Adicionar

  • Os pacotes javafx.scene.layout, HBox e VBox, oferecem agora suporte ao posicionamento do nó dentro do espaço alocado com o uso de nodeVPos e nodeHPos respectivamente. No JavaFX SDK 1.1, todos os nós estavam na parte superior do HBox e à esquerda do VBox. ícone de Alterado

  • Na classe javafx.scene.layout.Resizable, as variáveis preferredHeight e preferredWidth já não estão incluídas na classe Resizable. As funções getPreferredHeight() e getPreferredWidth() oferecem o mesmo suporte que as antigas variáveis preferredHeight e preferredWeight. As variáveis preferredHeight e preferredWidth agora são variáveis locais e podem ser acessadas através das funções protegidas getPreferredHeight() e getPreferredWidth() na classe Resizable. Renomear

    Antigo: public-read protected preferredWidth: Number
    Novo:   protected override bound function getPreferredWidth(): Number
    Antigo: public-read protected preferredHeight: Number
    Novo:   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 com visible: false;) estavam incluídos nos limites de Group. No JavaFX SDK 1.2, nenhum filho invisível contribui para os limites de seu Group pai. Se quiser esse comportamento, defina o nó filho como (visible:true; opacity:0;).ícone de Alterado

  • As classes seguintes são novas no javafx.stage: ícone de Adicionar


  • A nova classe Screen torna obsoleta as propriedades javafx.screen.width e javafx.screen.height. javafx.screen.width e javafx.screen.height já não são suportados de javafx.FX.getProperty(). ícone de Remover

  • A classe Screen também inclui uma propriedade dpi para consulta de tamanho de tela e resolução (DPI). ícone de Adicionar

  • A variável focused da classe javafx.stage.Stage se chama agora containsFocus. ícone de Alterado

  • É 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. ícone de Alterado

    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. ícone de Alterado

    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 de fxdContent já é membro de um Group FXDLoader criado. 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 classe javafx.fxd.Duplicator para 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 fromAWTColor não está mais incluído na classe javafx.scene.paint.Color. ícone de Remover
    public fromAWTColor(c: java.awt.Color) : Color 

  • A variável enabled foi removida da classe javafx.ext.swing.SwingComponents. ícone de Remover

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 Node e o manipulador de tecla não é necessário para que o Node receba o foco com duas exceções: Control e SwingComponent podem receber o foco por padrão. A nova variável focusTraversable está agora incluída e é booleana. A variável focusTraversable especifica se este Node deve fazer parte de um ciclo de foco transversal. ícone de Alterado ícone de Adicionar

  • A nova variável source de Node está agora incluída na classe MouseEvent para propagação de eventos. A variável source é 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ável source é a mesma que o nó. Nos casos em que o nó for uma instância de Parent, a variável source é visualmente o nó mais alto da subárvore (@node) no evento do mouse. ícone de Adicionar

  • O pacote javafx.scene.input inclui agora as seguintes classes. ícone de Adicionar


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 agora mixins e, 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 ou mixins. Não é possível instanciar um mixin diretamente. Mixins parecem classes regulares, mas possuem o modificador mixin em 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: ícone de Alterado

    [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 or e and foi alterada. O operador and do JavaFX tem maior prioridade que o operador or. ícone de Alterado

       a or b and c   

    é equivalente a:

       a or (b and c)

  • Uma var de um bloco não pode ter o mesmo nome de uma var em um bloco de conteúdo. As estruturas a seguir agora não são permitidas: ícone de Alterado

  • 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");
       }
    } 
      
  • O disparador on replace não é mais permitido em bind. ícone de Alterado

    var x = bind for (i in [0..5]) {
        var y = (i mod 2 == 0) on replace { //compile error
            println("y changed");
        }
        y
    }

  • For-loops limitados em Iterable não são mais permitidos porque não há razão para isso e as atualizações não são vistas. ícone de Alterado

  • As alterações em Duration incluem o seguinte: ícone de Alterado

    • Duration.toMillis() retorna Double em vez de Number.
    • Duration.INDEFINITE representa agora um período de tempo desconhecido.
    • Duration.toDate() não é mais suportado.

  • Uma grande quantidade de palavras reservadas já não estão formalmente reservadas e pode ser usadas como identificadores: ícone de Alterado

    • first
    • in
    • init
    • into
    • inverse
    • last
    • on
    • postinit
    • replace
    • step
    • trigger
    • tween
    • where
    • with

 

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. ícone de Adicionar

    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. ícone de Adicionar

  • A mídia possui melhor suporte a depuração de vídeos. ícone de Adicionar

Mobile

  • O Mobile agora oferece suporte a recorte retangular. ícone de Adicionar

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

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

    • 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. ícone de Alterado

  • O desempenho do tempo de inicialização está melhor em relação ao anterior. ícone de Alterado

  • As alterações do compilador proporcionam melhor desempenho do tempo de execução. ícone de Alterado

  • Consulte o artigo Técnicas de aperfeiçoamento do desempenho para aplicativos JavaFX.


Armazenamento persistente

Pacote afetado: javafx.io

  • Um novo pacote javafx.io inclui agora as seguintes classes. ícone de Adicionar


Suporte à plataforma

  • Agora, o suporte é oferecido a duas plataformas adicionais de sistema operacional: ícone de Adicionar

    • 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. ícone de Adicionar

  • No pacote javafx.fxd, a classe FXDLoader possui variáveis e funções adicionais. A classe FXDLoader herda da classe javafx.async.Task para suporte a carregamento em segundo plano de arquivos FXZ/FXD. ícone de Adicionar

  • A classe FXDNode foi adicionada. A classe UiStub é substituída pela classe FXDNode. Os arquivos UI Stub da classe FXDNode. ícone de Adicionar

  • A classe FXDNode oferece 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). ícone de Alterado
  • Scene {content: FXDNode {           
               url: "{__DIR__}mygraphics.fxz"          
               backgroundLoading: true           
               placeholder: Text { x: 10 y: 10 content: "Loading graphics ..."}       
          }   
    }  

  • A variável _root não está mais incluída na classe FXDContent. A função getRoot() oferece o mesmo suporte que a antiga variável _root. ícone de Alterado

Componentes de controle da IU

Pacote afetado: javafx.scene.control

  • O pacote javafx.scene.control inclui agora as seguintes classes para criação de controles da IU. ícone de Adicionar


  • Consulte o artigo sobre Controles da IU do JavaFX Scene.

  • Control é agora uma classe abstrata e foi significativamente alterada. ícone de Alterado

  • A variável Behavior foi adicionada à classe javafx.scene.control.Skin e removida das variáveis focused, hover e pressed. ícone de Remover ícone de Adicionar

  • A variável scene foi renomeada por node na classe javafx.scene.control.Skin. ícone de Alterado

    Antigo:
    public-init protected scene Node
    Novo:  
    public-read protected node Node
  • A classe Skin é agora uma classe abstrata e as novas funções contains() e intersects() foram adicionadas. Os nomes das funções existentes foram alterados conforme segue abaixo. ícone de Alterado ícone de Adicionar

  • 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
  • A classe TextBox foi significativamente alterada e uma nova funcionalidade foi adicionada. ícone de Alterado ícone de Adicionar

Componentes dos gráficos da IU

Pacotes afetados: javafx.scene.chart, javafx.scene.chart.data, javafx.scene.chart.part


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 agora HttpRequest.start(). ícone de Alterado

  • HttpRequest.cancel() se chama agora HttpRequest.stop(). ícone de Alterado

  • Estas duas funções públicas não estão mais incluídas: ícone de Remover

    public function setHeader(name: String, value: String)
    public function getResponseHeaderNames(): String[]
    

  • A assinatura destes métodos e campos foi alterada de Integer para Long: ícone de Alterado

    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 URLConverter agora está incluída no pacote javafx.io.http. ícone de Adicionar

  • O novo pacote javafx.data.feed inclui as duas classes seguintes: ícone de Adicionar


  • O novo pacote javafx.data.feed.atom inclui as classes seguintes: ícone de Adicionar


  • O novo pacote javafx.data.feed.rss inclui as classes seguintes: ícone de Adicionar


Diversos

Pacotes afetados: javafx.util, javafx.data

 

English
日本語
한국어
简体中文
Português do Brasil
русский