JavaFX: Como usar eventos de Propriedade
Propriedades JavaFX proporcionar um addListener Método que permite adicionar manipuladores de eventos que são chamados sempre que o valor de uma propriedade mudanças. Você pode criar dois tipos de manipuladores de eventos de propriedade:
UMA mudança ouvinte, que é chamado sempre que o valor da propriedade foi recalculado. O ouvinte de alteração é passado três argumentos: a propriedade cujo valor foi alterado, o valor anterior da propriedade, e o novo valor.
A ouvinte invalidação, que é chamado sempre que o valor da propriedade torna-se desconhecido. Este evento é gerado quando o valor da propriedade precisa ser recalculada, mas ainda não foi recalculado. Um ouvinte de evento de invalidação é passado apenas um argumento: o próprio objeto de propriedade.
Mudança e de invalidação ouvintes são definidos por interfaces funcionais nomeados ChangeListener e InvalidationListener. Porque essas interfaces são interfaces funcionais, você pode usar expressões lambda para implementá-las. Aqui está como você usa uma expressão lambda para registrar um ouvinte de alteração na texto propriedade de um campo de texto chamado text1:
. Text1.textProperty () addListener ((observável, OldValue, newvalue) -> // código vai aqui) -
Aqui está um exemplo que registra um ouvinte de invalidação:
. Text1.textProperty () addListener ((observável) -> // código vai aqui) -
A única maneira que o addListener sabe se você está registrando um ouvinte de alteração ou um ouvinte de invalidação é olhando para os argumentos que você especificar para a expressão Lambda. Se você fornecer três argumentos, addListener registra um ouvinte de alteração. Se você fornecer apenas um argumento, um ouvinte de invalidação está instalado.
Esta listagem de código mostra uma aplicação JavaFX simples que utiliza mudança de ouvintes de variar o tamanho de um rectângulo automaticamente com o tamanho do painel a pilha que ele contém.
Um ouvinte de alteração é registrado com propriedade de largura painel de pilha de modo que sempre que a largura do painel muda de pilha, a largura do retângulo é automaticamente ajustado para metade a nova largura do painel de pilha. Da mesma forma, um ouvinte de alteração é registrado na propriedade altura para mudar a altura do retângulo.
importação javafx.application. * - import javafx.stage. * - import javafx.scene. * - import javafx.scene.layout. * - import javafx.scene.shape. * -. importação javafx.scene.paint * - classe pública AutoRectangle estende a aplicação {void main (String [] args) public static {lançamento (args) -} @ Substituir início public void (Stage primaryStage) {Rectangle r = new Rectangle(100,100)-@@a18r.setFill(Color.LIGHTGRAY)-r.setStroke(Color.BLACK)-r.setStrokeWidth(2)-StackPane p = new StackPane()-@@a23p.setMinWidth(200)-p.setPrefWidth(200)-p.setMaxWidth(200)-p.setMinHeight(200)-p.setPrefHeight(200)-p.setMaxHeight(200)-p.getChildren().add(r)-p.widthProperty().addListener(@@a33(observable, OldValue, newvalue) -> r.setWidth ((Duplo) newvalue / 2)) - p.heightProperty () addListener (@@ a38 (observável, OldValue, newvalue) -.> r.setHeight ((Duplo) newvalue / 2) ) cena -Cena = new Scene (p) -primaryStage.setScene (cena) -primaryStage.setTitle ( "Auto Retângulo") - primaryStage.show () -}}
Esta figura mostra este aplicativo em ação. Esta figura mostra a janela inicial apresentada pela aplicação, bem como a forma como a janela aparece após o usuário fez a janela mais alta e larga. Como você pode ver, o retângulo tem aumentado em tamanho proporcionalmente.
Os parágrafos seguintes descrevem os destaques:
18: Estas linhas de criar um retângulo 100x100 e definir a cor do retângulo de preenchimento, cor do traço, e largura do traçado.
23: Estas linhas de criar um painel de pilha e definir suas propriedades largura e altura.
33: Estas linhas usar uma expressão Lambda para registrar um manipulador de mudança com parâmetro de largura painel de pilha. Quando a largura do painel muda de a pilha, a largura do rectângulo é definido como uma metade da largura do painel da pilha.
38: Estas linhas usar uma expressão Lambda para registrar um manipulador de mudança com o parâmetro altura do Painel de pilha. Quando a altura do painel da pilha muda, a altura do rectângulo é definido como uma metade da altura do painel da pilha.