JavaFX TableView不显示内容

时间:2015-09-18 16:02:55

标签: java javafx tableview

我正在尝试在TableView中插入一些值,但它不显示列中的文本,即使它们不是空的,因为有三行(我在TableView中插入的项目数相同) )可点击。

I can select raws but I can't see them

我有类“ ClientiController ”,它是fxml文件的控制器,这些是TableView的声明和tableView的列。

@FXML // fx:id="clientitable"
private TableView clientitable; // Value injected by FXMLLoader

@FXML // fx:id="nome"
private TableColumn nome; // Value injected by FXMLLoader

@FXML // fx:id="id"
private TableColumn id; // Value injected by FXMLLoader

@FXML // fx:id="telefono"
private TableColumn telefono; // Value injected by FXMLLoader

我在 initialize()方法中调用一个名为 loadTable()的函数,该函数将内容添加到TableView。

loadTable 位于同一个类“ ClientiController ”中,这是它的实现:

    @FXML
void loadTable()
{
    //Cliente
    try {
        List<String> clienti = (List<String>) fc.processRequest("ReadClienti");
        ObservableList<String> clienteData = FXCollections.observableArrayList(clienti);

        id.setCellValueFactory(new PropertyValueFactory<Cliente, String>("id"));
        nome.setCellValueFactory(new PropertyValueFactory<Cliente, String>("nome"));
        cognome.setCellValueFactory(new PropertyValueFactory<Cliente, String>("cognome"));
        telefono.setCellValueFactory(new PropertyValueFactory<Cliente, String>("n_tel"));


        System.out.println(clienteData);
        clientitable.setItems(clienteData);

        } catch (SecurityException | NoSuchMethodException
            | ClassNotFoundException | InstantiationException
            | IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
}

在课程Cliente中我有这些字符串:

private String id, nome, cognome, n_tel;

每个String元素的get和set函数,它们从数据库中获取值。 在这个类中我也有readAll方法(ReadClienti)。 函数List<Cliente> clienti中的loadTable()中有readAll方法的结果,函数返回ArrayList<ArrayList<String>>类型。

如果我选择第一个原始(即使我看不到列中的文本),然后像这样打印,

ArrayList<String> person =  (ArrayList<String>) clientitable.getSelectionModel().getSelectedItem();
System.out.println(person); 

一切正常,它打印出我作为第一个插入的值,所以我知道这些值实际上在那个表中。

我也尝试将此类中的私有String字符串更改为SimpleStringProperty,就像我在此处的其他讨论中看到的那样,但没有任何改变。

如何让tableView显示其内容?

修改 我认为问题在于作业

            List<String> clienti = (List<String>) fc.processRequest("ReadClienti");

loadTable()的第一个原始文件中,因为我无法将类型ArrayList<ArrayList<String>>转换为List<String>。 但是我必须在其中填充值以填充ListView的ObservableList<String>仅获取列表或简单的ArrayLists作为输入。 如何转换ArrayList<ArrayList<String>>变量以匹配ObservableList类型?

1 个答案:

答案 0 :(得分:0)

您的课程“ Cliente”没有getter和setter。并且还要注意参数的获取器和设置器的名称。 getter和setter不应与上面声明的参数不同。
例如:

private String Clienteid;
private String ClienteName;

public getClientid(){
    return Clienteid;
}

这行代码需要类的获取器和设置器...

id.setCellValueFactory(new PropertyValueFactory<Cliente, String>("id"));
nome.setCellValueFactory(new PropertyValueFactory<Cliente, String>("nome"));