【问题标题】:I cant see the element of a TableView - JavaFX [duplicate]我看不到 TableView 的元素 - JavaFX [重复]
【发布时间】:2016-10-31 15:34:34
【问题描述】:

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

}

这是 Personas 类:

package ejemplo.tableview;

public class Personas {
    private String nombre;
    private String apellido;

    public Personas(String nombre,String apellido){
        this.nombre = nombre;
        this.apellido = apellido;

    }
}

【问题讨论】:

  • 发布Personas的代码。我想问题将是该类的缺失访问器。它应该有一个公共的nombreProperty()getNombre() 和一个公共的apellidoProperty()getApellido(),返回类型为字符串。
  • 好的,我发布代码,再次抱歉,我是这个页面的新手。
  • 你认为我必须创建两个 getter 方法而不是返回名称(名词)和姓氏(apellido)吗?

标签: java javafx tableview elements


【解决方案1】:

查看PropertyValueFactory的文档:

回调接口的便捷实现,设计 专门用于 TableColumn 单元格值工厂。一个 如何使用这个类的例子是:

TableColumn firstNameCol = new TableColumn("名字"); firstNameCol.setCellValueFactory(新 PropertyValueFactory("firstName"));

在此示例中,“firstName”字符串用作对 假定 Person 类类型中的 firstNameProperty() 方法(即 TableView 项目列表的类类型)。此外,此方法 必须返回一个 Property 实例。如果一种方法满足这些 找到要求,然后用这个填充 TableCell 可观察值。另外,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();}
}

【讨论】:

    猜你喜欢
    • 2021-01-11
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2016-05-13
    • 2018-09-19
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多