在JAVA FX中将字符串行添加到TableView

在JAVA FX中将字符串行添加到TableView,java,javafx,javafx-8,Java,Javafx,Javafx 8,我找不到将简单的“字符串”行添加到tableView的方法。 事实上,我可以添加一行,但其内容不可见 这是我的密码: @FXML private TableView<String> table; @FXML private TableColumn<String, String> table2; public ObservableList<String> getLanes() { ObservableList<String> lanes

我找不到将简单的“字符串”行添加到tableView的方法。 事实上,我可以添加一行,但其内容不可见

这是我的密码:

@FXML
private TableView<String> table; 

@FXML
private TableColumn<String, String> table2;

public ObservableList<String> getLanes()
{
    ObservableList<String> lanes=FXCollections.observableArrayList();
    lanes.add("TEST");

    return lanes;
}

但是没有成功。 我阅读了和其他的文档,但是用这种简单的方式做并没有帮助

编辑:

添加此行解决了我的问题:

table2.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));

这里是一个简单的应用程序,我们尝试将单个值加载到TableView列中。它还显示了如何在表列上设置
cellValueFactory()

tableColumn.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));
MCVE

import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        TableView<String> tableView = new TableView<>();
        TableColumn<String, String> tableColumn = new TableColumn<>("Name");

        tableColumn.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));

        tableView.getColumns().add(tableColumn);
        ObservableList<String> items = FXCollections.observableArrayList("Itachi");
        tableView.setItems(items);

        VBox root = new VBox(tableView);
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 300, 275);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.beans.property.ReadOnlyStringWrapper;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
TableView TableView=新建TableView();
TableColumn TableColumn=新的TableColumn(“名称”);
tableColumn.setCellValueFactory(param->new ReadOnlyStringWrapper(param.getValue());
tableView.getColumns().add(tableColumn);
ObservableList items=FXCollections.observableArrayList(“Itachi”);
tableView.setItems(项目);
VBox root=新的VBox(tableView);
根部设置对齐(位置中心);
场景=新场景(根,300275);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

这是一个简单的应用程序,我们试图将单个值加载到TableView列中。它还显示了如何在表列上设置
cellValueFactory()

tableColumn.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));
MCVE

import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        TableView<String> tableView = new TableView<>();
        TableColumn<String, String> tableColumn = new TableColumn<>("Name");

        tableColumn.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));

        tableView.getColumns().add(tableColumn);
        ObservableList<String> items = FXCollections.observableArrayList("Itachi");
        tableView.setItems(items);

        VBox root = new VBox(tableView);
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 300, 275);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.beans.property.ReadOnlyStringWrapper;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
TableView TableView=新建TableView();
TableColumn TableColumn=新的TableColumn(“名称”);
tableColumn.setCellValueFactory(param->new ReadOnlyStringWrapper(param.getValue());
tableView.getColumns().add(tableColumn);
ObservableList items=FXCollections.observableArrayList(“Itachi”);
tableView.setItems(项目);
VBox root=新的VBox(tableView);
根部设置对齐(位置中心);
场景=新场景(根,300275);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

可能的重复项您是否为您的专栏定义了一个
setCellValueFactory()
?@ItachiUchiha没有。因为即使有很多例子,我也不知道它的用途和应该如何使用。。。如果你能给我一些建议…两个专栏怎么样<代码>私有表列名;私有表列lastName可能的重复项您是否为您的列定义了
setCellValueFactory()
?@ItachiUchiha没有。因为即使有很多示例,我也不知道它的用途和使用方法。。。如果你能给我一些建议…两个专栏怎么样<代码>私有表列名;私有表列lastName非常感谢。简单地添加这一行就解决了我的问题:
table2.setCellValueFactory(param->new ReadOnlyStringWrapper(param.getValue())
我仍然很好奇为什么人们更喜欢
ReadOnlyStringWrapper
而不是它的超类
SimpleStringProperty
ReadOnlyStringWrapper
不是不可修改的属性…以保持事物不变;)嗯,param.getValue()的定义不多。简单地添加这一行就解决了我的问题:
table2.setCellValueFactory(param->new ReadOnlyStringWrapper(param.getValue())
我仍然很好奇为什么人们更喜欢
ReadOnlyStringWrapper
而不是它的超类
SimpleStringProperty
ReadOnlyStringWrapper
不是不可修改的属性…以保持事物不变;)嗯,param.getValue()没有定义