Я извлекаю данные из XML-файла с помощью Wrapper для моего класса модели.Добавление индекса записей в столбец Javafx Tableview
Модель Класс:
private final StringProperty fileSubject;
private final StringProperty fileDate;
private final StringProperty fileRemarks;
public void setFileSubject(String fileSubject){
this.fileSubject.set(fileSubject);
}
public String getFileSubject() {
return fileSubject.get();
}
public StringProperty fileSubjectProperty() {
return fileSubject;
}
public void setFileDate(String fileDate){
this.fileDate.set(fileDate);
}
public String getFileDate() {
return fileDate.get();
}
public StringProperty fileDateProperty() {
return fileDate;
}
public void setFileRemarks(String fileRemarks){
this.fileRemarks.set(fileRemarks);
}
public String getFileRemarks() {
return fileRemarks.get();
}
public StringProperty fileRemarksProperty(){
return fileRemarks;
}
/**
* Default constructor.
*/
public FileModel(){
this(null,null, null);
}
/**
*Constructor with some initial data.
*
*@param
*
*/
public FileModel(String fileSubject, String fileDate, String fileRemarks){
this.fileSubject = new SimpleStringProperty(fileSubject);
this.fileDate = new SimpleStringProperty(fileDate);
this.fileRemarks = new SimpleStringProperty(fileRemarks);
}
}
Упаковочный Класс:
@XmlRootElement(name = "files")
public class FileListWrapper {
private List<FileModel> files;
@XmlElement(name = "file")
public List<FileModel> getFiles() {
return files;
}
public void setFiles(List<FileModel> files) {
this.files = files;
}
}
Вот как я демаршаллизации его:
JAXBContext context = JAXBContext
.newInstance(FileListWrapper.class);
Unmarshaller um = context.createUnmarshaller();
File file = new File("xxxxxxxxxx/xxx/x/xxxx/x.xml");
// Reading XML from the file and unmarshalling.
FileListWrapper wrapper = (FileListWrapper) um.unmarshal(file);
fileData.clear();
fileData.addAll(wrapper.getFiles());
Теперь я добавляю извлеченные данные в Tableview как ниже:
@FXML
private void initialize(){
//Initialize the file table with the three columns.
indexColumn = new TableColumn<>("Index");
indexColumn.setCellFactory(col -> {
TableCell<FileModel, Void> cell = new TableCell<>();
cell.textProperty().bind(Bindings.createStringBinding(() -> {
if (cell.isEmpty()) {
return null ;
} else {
return Integer.toString(cell.getIndex());
}
}));
return cell ;
});
fileTable.getColumns().add(0, indexColumn);
fileSubjectColumn.setCellValueFactory(cellData -> cellData.getValue().fileSubjectProperty());
fileDateColumn.setCellValueFactory(cellData -> cellData.getValue().fileDateProperty());
fileTable.getSelectionModel().selectedItemProperty().addListener(
(observable, oldValue, newValue) -> showFileDetails(newValue));
showFileDetails(null);
}
/**
*Is called by the main application to give a reference back to itself.
*
*@param mainApp
*/
public void setMainApp(MainAppClass mainApp){
this.mainApp = mainApp;
FilteredList<FileModel> filteredData = new FilteredList<>(mainApp.getFileData(), p -> true);
// 2. Set the filter Predicate whenever the filter changes.
filterField.textProperty().addListener((observable, oldValue, newValue) -> {
filteredData.setPredicate(files -> {
// If filter text is empty, display all files.
if (newValue == null || newValue.isEmpty()) {
return true;
}
// Compare File Subject and Date of every file with filter text.
String lowerCaseFilter = newValue.toLowerCase();
if (files.getFileSubject().toLowerCase().indexOf(lowerCaseFilter) != -1) {
return true; // Filter matches Subject.
}
else if (files.getFileDate().toLowerCase().indexOf(lowerCaseFilter) != -1) {
return true; // Filter matches last name.
}
return false; // Does not match.
});
});
// 3. Wrap the FilteredList in a SortedList.
SortedList<FileModel> sortedData = new SortedList<>(filteredData);
// 4. Bind the SortedList comparator to the TableView comparator.
sortedData.comparatorProperty().bind(fileTable.comparatorProperty());
// 5. Add sorted (and filtered) data to the table.
fileTable.setItems(sortedData);
}
Теперь, indexColumn
не отображает ни одного указателя. Пожалуйста, помогите мне с этим. Я пробовал несколько вещей, но не работал.
Ен !!! он не отображает данные в столбце и даже не создает столбец с именем «Индекс». – user3626720
Это образец моего кода: [link] (http://code.makery.ch/library/javafx-8-tutorial/part5/) @James_D – user3626720
Не могу проверить это прямо сейчас, но я предполагаю, что вы добавили столбец к таблице ...? –