Wenn ich das Binding für einen einfaches Label richtig verstanden habe, wird bei Änderung des Properties, welches ich an das Label gebunden habe, doch das Label automatisch mit aktualisiert? Warum erscheint dann aber im Label nicht der aktuelle Text?
Hier mal mein Code:
Wenn das Programm startet, wird noch korrekt im Label
Status: Bereit für Analyse, wählen Sie bitte das Verzeichnis mit den Excel-Files über den Button >Import< aus.
angezeigt! In der Routine importXLS soll nun per
der Status pro Datei geändert werden.
Es bleibt aber der erste Text "Status: Bereit für Analyse, wählen..." stehen, und nach Abschluß der Analyse, zeigt er mir die den Status für die letzte Datei an.
Wenn ich einen Listener, zum Testen, auf lblStatus registriere z.B. so
wird mir in der Console alles richtig angezeigt.
Hab ich was übersehen/falsch verstanden?
Hier mal mein Code:
Code:
public class BAGAZLController implements Initializable {
@FXML AnchorPane content;
@FXML Label lblStatus;
/*
* Tabelview definieren aus application.helpers.ImportRecord
*/
@FXML
private final TableView<TableRecord> tableData = new TableView<TableRecord>();
private ObservableList<TableRecord> dataList = FXCollections.observableArrayList();
private ArrayList<File> files;
private BAGAZL_Helper helper = new BAGAZL_Helper();
private Object[][] xlsDatas;
SimpleStringProperty appStatus;
public BAGAZLController() {
}
@Override
public void initialize(URL location, ResourceBundle resources) {
createTableData();
this.setFiles(new ArrayList<File>());
// Application Status initialisieren und an das Label @FXML lblSatus binden
appStatus = new SimpleStringProperty();
lblStatus.textProperty().bind(Bindings.concat("Status: ", appStatus));
// Initialsatus ausgeben
appStatus.set("Bereit für Analyse, wählen Sie bitte das Verzeichnis mit den Excel-Files über den Button >Import< aus.");
}
@FXML
public void importXLS() {
DirectoryChooser dirChooser = new DirectoryChooser();
File selDirectory = dirChooser.showDialog(null);
// Verzeichniss einlesen
ArrayList<File> files = helper.getimpFile(selDirectory);
if (files == null) return;
try {
for (File file : files) {
// Applicationstatus aus geben, dass Datei XYZ.* analysiert wird
appStatus.setValue("ananlysiere -> " + file.getCanonicalPath().toString());
this.xlsDatas = new Object[12][4];
if (!file.getCanonicalPath().toString().contains("Ruf")) {
if (!file.getCanonicalPath().toString().contains("$")) {
XLS_Helper xlsHelper = new XLS_Helper(file);
this.xlsDatas = xlsHelper.getXLSData();
if (this.xlsDatas != null) {
..........
Wenn das Programm startet, wird noch korrekt im Label
Status: Bereit für Analyse, wählen Sie bitte das Verzeichnis mit den Excel-Files über den Button >Import< aus.
angezeigt! In der Routine importXLS soll nun per
Code:
// Applicationstatus aus geben, dass Datei XYZ.* analysiert wird
appStatus.setValue("ananlysiere -> " + file.getCanonicalPath().toString());
der Status pro Datei geändert werden.
Es bleibt aber der erste Text "Status: Bereit für Analyse, wählen..." stehen, und nach Abschluß der Analyse, zeigt er mir die den Status für die letzte Datei an.
Wenn ich einen Listener, zum Testen, auf lblStatus registriere z.B. so
Code:
lblStatus.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> ov, String oldValue, String newValue) {
System.out.println("Label Text Changed (old: " + oldValue + " new: " + newValue);
}
})
Hab ich was übersehen/falsch verstanden?