我的JavaFX表视图未显示测试数据:
主要代码:
www.pornhub.com
控制器代码:
package javafxapp;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class JavaFXApp extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root =
FXMLLoader.load(getClass().getResource("view/FXMLCatalogo.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
ps:在调试中可以看到contatos列表正确填充了!
Contato Model Class:
package javafxapp.controller;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafxapp.model.Contato;
/**
*
* @author
*/
public class FXMLCatalogoController implements Initializable {
private final ObservableList<Contato> contatos =
FXCollections.observableArrayList();
@FXML
private Label labelNome, labelSobrenome, labelCidade,
labelEstado, labelCep, labelDataNasc;
@FXML
private TableView<Contato> tableContato = new TableView<>();
@FXML
private TableColumn<Contato, String> columnNome = new TableColumn<>("Nome");
private TableColumn<Contato, String> columnSobrenome = new TableColumn<>("Sobrenome");
@Override
public void initialize(URL url, ResourceBundle rb) {
columnNome.setCellValueFactory(cellData -> cellData.getValue().nomeProperty());
columnSobrenome.setCellValueFactory(cellData -> cellData.getValue().sobrenomeProperty());
tableContato.setItems(getItems());
tableContato.getColumns().addAll(columnNome, columnSobrenome);
}
public ObservableList<Contato> getItems() {
contatos.add(new Contato("Henrique 1", "Rosa", "São Paulo", "SP", "08285140", "22/08/1990"));
contatos.add(new Contato("Henrique 2", "Rosa", "Rio Janeiro", "RJ", "08285140", "22/08/1991"));
contatos.add(new Contato("Henrique 3", "Rosa", "Belo Horizont", "MG", "08285140", "22/08/1992"));
contatos.add(new Contato("Henrique 4", "Rosa", "São Caetano do Sul", "SP", "08285140", "22/08/1993"));
contatos.add(new Contato("Henrique 5", "Rosa", "Diadema", "SP", "08285140", "22/08/1994"));
contatos.add(new Contato("Henrique 6", "Rosa", "Osasco", "SP", "08285140", "22/08/1994"));
contatos.add(new Contato("Henrique 7", "Rosa", "Guarulhos", "SP", "08285140", "22/08/1995"));
contatos.add(new Contato("Henrique 8", "Rosa", "São Paulo", "SP", "08285140", "22/08/1996"));
contatos.add(new Contato("Henrique 9", "Rosa", "São Paulo", "SP", "08285140", "22/08/1997"));
contatos.add(new Contato("Henrique 10", "Rosa", "São Paulo", "SP", "08285140", "22/08/1998"));
return contatos;
}
}
我的FXML文件:
package javafxapp.model;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class Contato {
private final StringProperty nome;
private final StringProperty sobrenome;
private final StringProperty cidade;
private final StringProperty estado;
private final StringProperty cep;
private final StringProperty dtNasc;
public Contato(String nome, String sobrenome, String cidade, String estado, String cep, String dtNasc) {
this.nome = new SimpleStringProperty(nome);
this.sobrenome = new SimpleStringProperty(sobrenome);
this.cidade = new SimpleStringProperty(cidade);
this.estado = new SimpleStringProperty(estado);
this.cep = new SimpleStringProperty(cep);
this.dtNasc = new SimpleStringProperty(dtNasc);
}
public String getNome() {
return nome.get();
}
public void setNome(String nome) {
this.nome.set(nome);
}
public StringProperty nomeProperty() {
return this.nome;
}
public String getSobrenome() {
return sobrenome.get();
}
public void setSobrenome(String sobrenome) {
this.sobrenome.set(sobrenome);
}
public StringProperty sobrenomeProperty() {
return this.sobrenome;
}
public String getCidade() {
return cidade.get();
}
public void setCidade(String cidade) {
this.cidade.set(cidade);
}
public String getEstado() {
return estado.get();
}
public void setEstado(String estado) {
this.estado.set(estado);
}
public String getCep() {
return cep.get();
}
public void setCep(String cep) {
this.cep.set(cep);
}
public String getDtNasc() {
return dtNasc.get();
}
public void setDtNasc(String dtNasc) {
this.dtNasc.set(dtNasc);
}
}
问题: 1.是否需要在FXML文件中添加有关Observable列表的一些信息? 2.是否需要使ObservableLsit最终? 3.只在表格视图中添加列表,才能在列表和表格视图之间建立链接?
因为我尝试了这一切并且没有任何改变......:[
非常感谢!
答案 0 :(得分:0)
在FXML
文件中声明了以下元素
<TableView fx:id="tableContato" ... >
<columns>
<TableColumn fx:id="columnNome" ... />
<TableColumn fx:id="columnSobrenome" ... />
</columns>
</TableView>
然后手动创建他们的实例是错误的。只需要声明元素(带有相关的注释)
...
@FXML
private TableView<Contato> tableContato;
@FXML
private TableColumn<Contato, String> columnNome;
@FXML
private TableColumn<Contato, String> columnSobrenome;
...
因此,应该删除在初始化时明显添加的列
...
//tableContato.getColumns().addAll(columnNome, columnSobrenome);
...
以上更改应该有效
在FXML
文件中,表格为标识tabelaContato
,在控制器中使用tableContato
。两个地方都应使用相同的名称。