我看不到TableView的元素 - JavaFX

时间:2016-06-29 05:18:39

标签: java javafx tableview elements

我有这个问题,当运行我的应用程序时我看不到添加到我的表之前的元素,我创建一个类(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;

    }
}

1 个答案:

答案 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();}
}