O que fazer todas as palavras em uma JavaFX App significa?

Usando a estrutura JavaFX, os desenvolvedores adicionar componentes úteis, visualmente atraente para seus aplicativos Java. JavaFX é uma de várias estruturas, começando com o Abstract Windowing Toolkit em 1995 e Java Swing em 1998. A primeira versão do JavaFX remonta a 2008, mas JavaFX tornou-se um cidadão de primeira classe na biblioteca Java padrão com a segunda atualização de Java 7 em 2011.

Também em 2011, a Oracle lançou a versão 2 do JavaFX. Esta nova versão combinada documentos XML com o código Java - declarando a aparência de um aplicativo com XML e as ações de um aplicativo com o código Java. JavaFX usa seu próprio dialeto da linguagem XML, chamado FXML.

(Se você se preocupa com as origens de siglas, XML representa o eXtended Markup Language, e JavaFX provavelmente tem algo a ver com Java "EFF-ECTS especiais". Então, dependendo do seu gosto, FXML significa tanto EFF-ECTS eXtended Markup Language ou EFF-ECTS Markup Language. Faça sua escolha.)

Este artigo descreve alguns dos nomes que você encontra em um programa simples JavaFX. (Tenha em mente que esta referência a "alguns dos nomes" meios # 147 os nomes que pertencem exclusivamente ao mundo do JavaFX # 148- - isso não inclui nomes como Campo de texto e Botão que aparecem em outros ambientes de janelas, e não inclui nomes como java.lang e a Principal, que pertencem a baunilha tecnologias Java.)

Listagem 1 contém código FXML, e Listagem 2 contém código Java. Quando você executa estas duas listas como parte de um único aplicativo, você tem um programa que capitaliza as letras no seu texto. (Neste ponto, você pode sarcasticamente dizer "Um app que capitaliza texto? Grande coisa!" Uma resposta apropriada seria "um aplicativo que capitaliza TEXTO? GRANDE COISA!")

Listagem 1: O Root.fxml File

lt;? xml version = "1.0" encoding = "UTF-8"> lt;? import java.lang *> lt;.? importação javafx.scene.control *> lt;.? importação javafx.scene. layout *> lt.?;AnchorPane prefHeight = "130.0" prefWidth = "198,0" xmlns = "https://javafx.com/javafx/8" xmlns: fx = "https://javafx.com/fxml/1"fx: Controlador= "Application.Main"> lt;crianças>fx: id = "textField"layoutX= "25,0" layoutY= "26.0" />

euno existentes 2: O Main.java File

pacote de aplicativos-import javafx.application.Application-import javafx.event.ActionEvent-import javafx.fxml.FXML-import javafx.fxml.FXMLLoader-import javafx.scene.Parent-import javafx.scene javafx.scene.Scene-importação. control.TextField-import classe javafx.stage.Stage-público principal se estende Aplicação {main (String [] args) public static void {lançamento(args) -} @ vazio Overridepublic começar(Etapa primaryStage) {try {parente = raiz FXMLLoader.load(. GetClass () getResource ( "Root.fxml")) -Cena cena = new Scene (root, 400, 400)-scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm())-primaryStage.setScene (cena)-primaryStage.exposição()-} Catch (Exception e) {e.printStackTrace () -}} @FXMLTextField privada textField- @FXMLprotected void onclick(Evento ActionEvent) {textField.setText (textField.getText () toUpperCase ().) -}}

O código FXML

Como cada documento XML, o documento na Listagem 1 tem uma elemento raiz - um único elemento que começa no início do documento e termina no final do documento. Na Listagem 1, o elemento raiz começa com

e termina com

As linhas que começam com lt ;? (No topo da listagem 1) não contam como elementos XML.

O AnchorPane como um elemento raiz

A AnchorPane (Ou mais formalmente, um javafx.scene.layout.AnchorPane) É um lugar onde as coisas podem ser ancorados. Pense sobre a tentativa de colocar um botão ou um campo de texto em um grande espaço vazio. sem um AnchorPane, estes componentes flutuam à toa dentro do espaço. Com um AnchorPane, você pode fazer margem esquerda do campo de texto ser exatamente 25,0 pixels da beirada esquerda do AnchorPane. (Veja a Campo de texto elemento de layoutX atributo na Listagem 1.) Além disso, com um AnchorPane, você pode fazer borda superior do campo de texto ser exatamente 26,0 pixels a partir da borda superior do AnchorPane. (Veja a Campo de texto elemento de layoutY atributo na Listagem 1.) O mesmo vale para um botão ou por qualquer outro componente que você planta no interior do AnchorPane.

Dentro elemento raiz de um documento FXML, um fx: Controlador atributo informa Java o nome do controlador classe - a classe cujo código executa ações associadas com o aplicativo. Na Listagem 1, o nome da classe do controlador é application.Main. E que coincidência! A classe na Listagem 2 é nomeado a Principal, e está em um pacote chamado aplicação!

Se você acha do código FXML como um esboço, ele tem uma posição com subtítulos, e com subtítulos em subtítulos, e assim por diante. Na Listagem 1, título principal é AnchorPane. A única subposição AnchorPane é crianças. Mas crianças tem dois subtítulos do seu próprio- ou seja, Campo de texto e Botão.

A fx: atributo id

o Campo de texto tem um elemento fx: id atributo. Este atributo diz-lhe como encontrar este componente dentro de algum código Java. Em outras palavras,

diz que "para se referir a este elemento no interior do application.Main código Java, use o nome campo de texto."(Se você quiser mais detalhes, espreitar à frente para a discussão do código na Listagem 2.)

Você não tem que usar um termo descritivo para identificar um componente. Você pode escrever

Contanto que você usa a palavra woofinflang consistentemente (referindo-se a palavra woofinflang em seu código Java) tudo vai correr bem. É claro que, como nomes campo de texto, textField2 e phoneNumberField são mais informativos do que nomes como woofinflang. Portanto, fique longe woofinflangs se você puder.

O atributo mnemonicParsing

Na Listagem 1, dentro do Botão elemento, o mnemonicParsing atributo tem o valor falso. este falso valor diz Java não se incomodar definir uma tecla de atalho para o botão. Se o valor fosse verdade, você pode adicionar um sublinhado para o valor do botão de texto atributo:

text = "_ Capitalize"

Em seguida, o usuário não tem que mover o mouse sobre o botão. Porque o sublinhado vem imediatamente antes da letra C, pressionando Alt + C teria o mesmo efeito de clicar no botão.

O atributo onAction

Um botão de onAction atributo informa Java o nome do método a ser executado quando o usuário clica no botão. Na Listagem 1, o onAction o valor do atributo é #onclick. Isto diz Java para chamar a classe do controlador onclick método quando o usuário clica no botão. Felizmente, o application.Main classe na Listagem 2 tem uma onclick método.

Na Listagem 1, o onAction valor é #onclick. Mas na Listagem 2, o correspondente nome do método é onclick sem o símbolo de hash. Em um botão onAction atributo, o símbolo cardinal (#) Não faz parte do nome do método. Mas isso não significa que você pode omitir o símbolo de hash no documento FXML. Se você omitir o símbolo de hash então, quando você tenta executar o programa, você verá uma mensagem de erro feio.

O código Java

A classe na Listagem 2 aumenta a Aplicação classe. A Aplicação é exatamente o que você pensa que é -. um monte de código que um usuário pode lançamen- um programa com um propósito claramente indicado como "Criar um documento", "Navegar na Web" ou "Encontre um mate"

Executando e lançando

Há pelo menos duas maneiras de executar um programa de JavaFX. É uma maneira de executá-lo como um aplicativo Java normal. Por exemplo, no Eclipse, você seleciona Aplicação Run As-> Java.

Quando você fizer isso, o computador inicia a máquina virtual Java, que por sua vez chama o programa de a Principal método. Na Listagem 2, o a Principal método executa apenas uma instrução - uma chamada para o lançamento método. chamando o lançamento método define rodas JavaFX do aplicativo executado em movimento.

Alternativamente, você pode executar um código JavaFX pré-embalados. Um pacote pré-embalados inclui tudo o que um computador precisa para executar um aplicativo. Esse "tudo" inclui o código para verificar se há uma máquina virtual Java no computador do utilizador e código para baixar uma máquina virtual Java, se o computador não tiver uma. Quando você pré-embalagem de um aplicativo JavaFX Desta forma, o programa não precisa de um a Principal método. O sistema chama o programa de lançamento método automaticamente.

UMA .jarra arquivo é como um .fecho eclair arquivo, exceto que todos os .jarra arquivo contém determinados elementos específicos para programas Java. Uma das coisas que você pode colocar em um .jarra arquivo é um aplicativo JavaFX pré-embalados.

Quando você chamar a lançamento método, Java responde fazendo chamadas para o seu aplicativo de nisso e começar métodos. Você não vê um nisso método na Listagem 2, porque o seu a Principal classe herda o Aplicação classe de padrão nisso método. (Isso é bom porque o padrão nisso O método não faz nada.)

Coisas dentro de outras coisas

o começar método na Listagem 2 cria um parente. o parente é o ponto de partida Cena, e a Cena aparece em uma Etapa. Aqui está um pouco mais detalhadamente:

  • UMA Etapa é o que você normalmente chamar uma "janela".

    É uma área de trabalho retangular na tela do usuário.

  • UMA Cena (Também conhecido como um grafo de cena) É uma árvore de componentes.

    Por exemplo, uma Cena pode conter dois painéis. O painel mais à esquerda contém dois painéis menores - um painel de topo e um painel inferior. O painel superior contém um botão-painel inferior contém um campo de texto. O painel mais à direita pode conter uma imagem e um rótulo para a imagem.

    Em aplicação deste artigo, a árvore de componentes é bastante simples. o Cena contém um AnchorPane que por sua vez contém um Campo de texto e um Botão. (Veja Lista 1.)

  • UMA parente é o ponto de partida para uma Cena.

    Apesar do que aparece na marca anterior, uma Cena não pode começar a sua vida por ter dois painéis, ou por ter dois de nada. Cada Cena inicia-se com um único componente, e que o componente deve ser do tipo parente. Assim, em aplicação deste artigo, o Cena contém um parente, que contém um AnchorPane, que contém um Campo de texto e um Botão.

o começar método na Listagem 2 conecta um parente para os componentes descritos na Listagem 1, associa um Cena com o parente, e em seguida associa um Etapa com o Cena. Finalmente, o código exibe o Etapa com uma chamada para o Etapa classe de exposição método.

Se você estiver familiarizado com o design da página web, você pode usar folhas de estilo em cascata (CSS) para descrever a aparência de uma cena. Na Listagem 2, a chamada para scene.getStyleSheets (). add associa uma folha de estilo com sua cena. Se seu .css arquivo está em branco (como no exemplo deste artigo), em seguida, chamar scene.getStyleSheets (). add não tem qualquer efeito.

Agir

Na Listagem 1, a linha

dá-lhe uma maneira de se referir a um dos componentes na tela do usuário. Assim, na Listagem 2, a linha

TextField privada textField-

torna este campo de texto componente ser um objeto em seu código Java.

Novamente na Listagem 1, do botão onAction atributo informa Java para chamar a classe do controlador onclick método quando o usuário clica no botão. Assim, na Listagem 2, o onclick método de violinos com o texto dentro do campo de texto componente. (Mais especificamente, o onclick método obtém o texto no campo de texto, capitaliza o texto e, em seguida, coloca o texto capitalizado de volta para o campo de texto.) Esta é a forma como o programa sabe o que fazer quando o usuário clica no botão.

Você nem sempre tem que usar palavras como campo de texto. Você pode nomear algo bershmlug contanto que você use o nome de forma consistente. No arquivo FXML, você escreve

e no código Java, você escreve

@FXMLprivate TextField bershmlug-@FXMLprotected onclick (evento ActionEvent) void {bershmlug.setText (bershmlug.getText () toUpperCase ()) -.}

o @FXML anotações na Listagem 2 são para controle de acesso. Quando você executar um programa JavaFX, um carregador agarra seu código FXML e converte-lo em código Java. (Ele "carrega" o código FXML em seu programa.) A fim de fazer o seu trabalho, o carregador deve acessar nomes como campo de texto e onclick na Listagem 2. Mas lembre-se: Este carregador não é parte do seu próprio programa. O carregador pertence a bibliotecas padrão do Java.

Como você pode controlar o acesso aos nomes campo de texto e onclick? modificadores de acesso comuns de Java (público, protegido, privado e padrão) deixá-lo pouca escolha. Com estes modificadores, a única forma de permitir o acesso de um programa externo é declarar campo de texto e onclick ser público. Mas, para muitos desenvolvedores, o uso indiscriminado de público o acesso é considerado acanhado. Com público Acesso, cada classe tem acesso a campo de texto e onclick. Isso não é realmente o que um desenvolvedor JavaFX quer.

Para resolver este problema, o @FXML anotação fornece um tipo especial de acesso. Na Listagem 2, o campo de texto é variável privado por isso, normalmente, nenhuma classe diferente a Principal pode acessar o campo de texto variável. Mas o @FXML anotação concede privilégio especial para o carregador. Ao contrário de qualquer outro código, o código do gestor pode fazer referência ao campo de texto variável. Quando você compilar e executar o seu programa, Java vê o @FXML anotação e faz truques especiais para fornecer acesso para o carregador.

O mesmo tipo de coisa é verdade para o onclick método. sem a @FXML anotação, o onclick protegida método pode ser chamado apenas de aulas em sua própria aplicação pacote, e a partir da sua subclasses a Principal classe. O carregador é nenhuma destas coisas. Assim, a concessão de acesso especial pelo carregador para o seu onclick método, você prefaciar o seu onclick declaração de método com @FXML.

menu