gpt4 book ai didi

java - 如何将 JavaFX 8 对象绑定(bind)到 java 变量?

转载 作者:行者123 更新时间:2023-11-29 04:55:41 25 4
gpt4 key购买 nike

我试图在我的程序中将一个 TextField 绑定(bind)到一个字符串(属性“nombre”)。我已经看到您可以使用 bind() 方法绑定(bind)两个 JavaFX 对象,但是由于 java 变量没有属性,我无法使用它来将我的 TextField 绑定(bind)到 String .这是我试图实现此目标的类(class)(没有 getter 和 setter):

public class NodoJugadores implements Serializable
{
private String nombre;
private int cedula;
private String sexo;
private int edad;
private String equipo;
private int categoria;
private int puntos;
private NodoJugadores proximo;
private NodoJugadores hijoIzquierdo;
private NodoJugadores hijoDerecho;

public NodoJugadores(String nombre, int cedula, String sexo, int edad, String equipo, int categoria, int puntos, NodoJugadores proximo)
{
this.nombre = nombre;
this.cedula = cedula;
this.sexo = sexo;
this.edad = edad;
this.equipo = equipo;
this.categoria = categoria;
this.puntos = puntos;
this.proximo = proximo;
}

public NodoJugadores(String nombre, int cedula, String sexo, int edad, String equipo, int categoria, int puntos, NodoJugadores hijoIzquierdo, NodoJugadores hijoDerecho)
{
this.nombre = nombre;
this.cedula = cedula;
this.sexo = sexo;
this.edad = edad;
this.equipo = equipo;
this.categoria = categoria;
this.puntos = puntos;
this.hijoIzquierdo = hijoIzquierdo;
this.hijoDerecho = hijoDerecho;
}

public void llenarGrid(GridPane grid)
{

if(sexo.equalsIgnoreCase("m"))
{
for(int i = 0 ; i < 8 ; i++)
{
TextField text = new TextField(nombre);

grid.add(text, i, 0);
}
}
}

static final long serialVersionUID = 8925409;
}

请尝试用一个实际例子来解释这是如何工作的。我将不胜感激。另外,值得一提的是,我无法将我的 String 转换为 StringProperty,因为我正在序列化该类。

最佳答案

解决方案 1:使用 StringProperty

使用 StringProperty 和自定义序列化形式使类 Serializable:

public class NodoJugadores implements Serializable {

private final transient StringProperty nombre = new SimpleStringProperty();

public StringProperty nombreProperty() {
return nombre ;
}

public final String getNombre() {
return nombreProperty().get();
}

public final void setNombre(String nombre) {
nombreProperty().set(nombre);
}

private void writeObject(ObjectOutputStream s) throws IOException {
s.defaultWriteObject();
s.writeObject(getNombre());
}

private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
s.defaultReadObject();
this.nombre = new SimpleStringProperty((String) s.readObject());
}
}

解决方案 2:使用 PropertyChangeListenerJavaBeanPropertyAdapter

这包含在 JavaBean wrapping with JavaFX Properties 中, 但基本上你会做

public class NodoJugadores implements Serializable {

private String nombre ;

private final PropertyChangeSupport pcs ;

public NodoJugadores() {
this.pcs = new PropertyChangeSupport(this);
}

public String getNombre() {
return nombre ;
}

public void setNombre(String nombre) {
String oldNombre = this.nombre ;
this.nombre = nombre ;
pcs.firePropertyChange("nombre", oldNombre, this.nombre);
}

public void addPropertyChangeListener(PropertyChangeListener listener) {
pcs.addPropertyChangeListener(listener);
}

}

然后在你的 UI 代码中你可以做

Label nombreLabel = new Label();
NodoJugadores nj = new NodoJugadores();
nombreLabel.textProperty().bind(new JavaBeanStringPropertyBuilder()
.bean(nj)
.name("nombre")
.build());

关于java - 如何将 JavaFX 8 对象绑定(bind)到 java 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com