Como criar um somente leitura propriedade em javafx
Video: Aula #1 Manipulando Controles
Conteúdo
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.