Como criar um somente leitura propriedade em javafx

Video: Aula #1 Manipulando Controles

Embora em JavaFX uma propriedade só de leitura tem menos funcionalidades do que uma leitura imóvel / escrever, é realmente mais complicado de implementar. Por quê? Porque internamente - dentro da classe que contém a propriedade somente leitura - você precisa ser capaz de ler ou escrever o valor da propriedade. Mas externamente - ou seja, fora da classe que define a propriedade somente leitura - você deve garantir que os usuários podem ler, mas não escrever o valor da propriedade.

Video: Java - JavaFX[ Controles de formulário ] - TextField

Você pode pensar que omitindo o método setter seria suficiente para criar uma propriedade só de leitura. Mas o problema é que, além de métodos get e set, propriedades JavaFX também expor um método de acesso propriedade que fornece acesso directo ao próprio objeto propriedade.

O seguinte é um exemplo de como não criar uma propriedade só de leitura:

Video: Aprenda a criar Interfaces Gráficas com JavaFX

StringProperty firstName = new SimpleStringProperty (este,"primeiro nome", ") -public final de Cordas getFirstName () {return firstName.get () -} público final StringProperty firstNameProperty () {return firstName-}

Este código é o mesmo que o código usado para criar uma propriedade de leitura / escrita, exceto que ele omitiu o setFirstName método. Infelizmente, esta definição de propriedade não impede que os usuários da classe que define a propriedade de modificar a propriedade. Para isso, tudo que o usuário precisa fazer é acessar a propriedade e, em seguida, chamar a propriedade da conjunto método directamente.

Por exemplo, suponha que esta propriedade faz parte de uma classe chamada Cliente, um exemplo dos quais é referenciado pela variável cust. O código a seguir iria definir o valor da propriedade somente leitura:



cust.getFirstName (). Conjunto ("bogus Valor") -

Para criar uma propriedade somente leitura com segurança, você deve realmente criar duas cópias do imóvel: uma versão somente leitura e uma versão de leitura / gravação. O read-only versão será exposto para o mundo exterior.

A versão de leitura / gravação será usado internamente, dentro da classe que define a propriedade. Então, você deve sincronizar essas duas propriedades para que sempre que o valor da leitura interna / escrever alterações de propriedade, o valor da propriedade somente leitura externa é atualizado automaticamente.

Para conseguir isso, JavaFX fornece duas classes adicionais para cada tipo de dados de propriedade: uma classe propriedade somente leitura e uma classe wrapper somente leitura. A classe de propriedade só de leitura é o que você compartilhar com o mundo exterior através do método de propriedade acessador. A classe wrapper somente leitura é o que você usa para criar o campo privada usada para fazer referência a propriedade dentro do programa.

Aqui está um exemplo completo que implementa uma propriedade inteiro somente leitura chamada número do cliente em uma classe chamada Cliente:

public class Cliente {ReadOnlyIntegerWrapper CUSTOMERNUMBER = new ReadOnlyIntegerWrapper (este,"número do cliente", 0) -public última Integer getCustomerNumber () {return customerNumber.get () -} ReadOnlyIntegerProperty public final () customerNumberProperty () {return customerNumber.getReadOnlyProperty () -} // mais detalhes da classe aqui}

A chave para entender como isso funciona é perceber que a classe wrapper somente leitura é uma extensão da classe propriedade simples que adiciona apenas um novo método: getReadOnlyProperty, que retorna uma cópia somente leitura da propriedade simples. Essa cópia só de leitura é sincronizado automaticamente com a propriedade simples, de modo que sempre que uma alteração é feita para a propriedade simples subjacente, o valor da propriedade somente leitura será alterado também.


Publicações relacionadas