我有这个问题,当运行我的应用程序时我看不到添加到我的表之前的元素,我创建一个类(Personas)并使用PropertyValueFactory。感谢和抱歉语言中的错误,我会说西班牙语。这是代码:
package ejemplo.tableview;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class EjemploTableView extends Application {
@Override
public void start(Stage primaryStage) {
ObservableList<Personas> data = FXCollections.observableArrayList(
new Personas("Diego","Maradona"),
new Personas("Lionel","Messi")
);
TableView<Personas> tabla = new TableView();
TableColumn<Personas,String> c1 = new TableColumn("Nombre");
c1.setMinWidth(200d);
c1.setCellValueFactory(new PropertyValueFactory<Personas,String>("nombre"));
TableColumn<Personas,String> c2 = new TableColumn("Apellido");
c2.setMinWidth(200d);
c2.setCellValueFactory(new PropertyValueFactory<>("apellido"));
tabla.getColumns().addAll(c1,c2);
tabla.setItems(data);
StackPane root = new StackPane();
root.getChildren().add(tabla);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
这是类人物角色:
package ejemplo.tableview;
public class Personas {
private String nombre;
private String apellido;
public Personas(String nombre,String apellido){
this.nombre = nombre;
this.apellido = apellido;
}
}
答案 0 :(得分:2)
查看PropertyValueFactory的文档:
设计的Callback接口的便捷实现 专门用于TableColumn单元格值工厂。一个 如何使用这个类的例子是:
TableColumn firstNameCol = new TableColumn(&#34;名字&#34;); firstNameCol.setCellValueFactory(新 PropertyValueFactory(&#34;的firstName&#34));
在此示例中,&#34; firstName&#34; string用作对a的引用 假设Person类类型中的firstNameProperty()方法(即 TableView项列表的类类型)。另外,这种方法 必须返回一个Property实例。如果满足这些方法 找到需求,然后填充TableCell ObservableValue。另外,TableView会自动添加一个 观察者返回的值,以便触发任何更改 通过TableView观察,导致细胞立即更新。
如果不存在与此模式匹配的方法,则存在漏洞 支持尝试调用get()或is()(即 是,上面示例中的getFirstName()或isFirstName())。如果一个方法 如果匹配此模式,则此方法返回的值为 包装在ReadOnlyObjectWrapper中并返回到TableCell。 但是,在这种情况下,这意味着TableCell不会 能够观察ObservableValue的变化(如同的情况) 第一种方法)。
基于此修改后的Personas
类:
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class Personas {
private StringProperty nombre = new SimpleStringProperty();
private StringProperty apellido = new SimpleStringProperty();
public StringProperty nombreProperty() {return nombre;};
public StringProperty apellidoProperty() {return apellido;};
public Personas(String nombre, String apellido) {
this.nombre.set(nombre);
this.apellido.set(apellido);
}
public String getNombre() {return nombre.get();}
public String getApellido() {return apellido.get();}
}