Hallo zusammen.
War erstmal schwierig eine passende Überschrift zu finden. // Edit: und nun ist auch noch ein Schreibfehler drin -.-
Ich stehe vor einem kleinem Problem, auf dass ich so spezifisch im Netz keine Antwort finde.
In der unten eingebetteten Klasse befindet sich eine Tabelle die aus einer SQL Datenbank die Daten zieht.
Wenn eine Zeile angeklickt wird, wird das gewählte Objekt in der Variable "cache" zwischengespeichert, in den Textfields darüber wiedergegeben, und kann dort bearbeitet und über den Speicherbutton wieder in die Datenbank geschrieben werden.
Nun zu meinem "Problem":
Ich möchte, dass der Speicherbutton erst dann aktiv wird, wenn irgendetwas in den Zeilen geändert wird.
Ich weiß, dies könnte ich über einen textChangeListener bewerkstelligen. Ich will aber vermeiden, in dem dazu nötigen boolean insgesamt 26 Argumente vergleichen zu müssen (14 Textfelder via .getText() mit 14 variablen aus dem PersonData Objekt).
Meine Java Kenntnisse habe ich mir weitestgehend selbst angeeignet, daher bin ich da etwas unbeholfen und der Code wird wohl auch etwas umständlich wirken, daher diese Fragestellung hier Also seht mir die ein oder anderen Konventionsbrüche bitte nach.
Hier der Code (nur aus der betreffenden Klasse). Dieser ist auch noch nicht fertig, also nicht über die leeren Methoden wundern
Ich danke euch im Voraus für die Ratschlage!
War erstmal schwierig eine passende Überschrift zu finden. // Edit: und nun ist auch noch ein Schreibfehler drin -.-
Ich stehe vor einem kleinem Problem, auf dass ich so spezifisch im Netz keine Antwort finde.
In der unten eingebetteten Klasse befindet sich eine Tabelle die aus einer SQL Datenbank die Daten zieht.
Wenn eine Zeile angeklickt wird, wird das gewählte Objekt in der Variable "cache" zwischengespeichert, in den Textfields darüber wiedergegeben, und kann dort bearbeitet und über den Speicherbutton wieder in die Datenbank geschrieben werden.
Nun zu meinem "Problem":
Ich möchte, dass der Speicherbutton erst dann aktiv wird, wenn irgendetwas in den Zeilen geändert wird.
Ich weiß, dies könnte ich über einen textChangeListener bewerkstelligen. Ich will aber vermeiden, in dem dazu nötigen boolean insgesamt 26 Argumente vergleichen zu müssen (14 Textfelder via .getText() mit 14 variablen aus dem PersonData Objekt).
Meine Java Kenntnisse habe ich mir weitestgehend selbst angeeignet, daher bin ich da etwas unbeholfen und der Code wird wohl auch etwas umständlich wirken, daher diese Fragestellung hier Also seht mir die ein oder anderen Konventionsbrüche bitte nach.
Hier der Code (nur aus der betreffenden Klasse). Dieser ist auch noch nicht fertig, also nicht über die leeren Methoden wundern
Ich danke euch im Voraus für die Ratschlage!
Java:
package de.morpheus.modules.baseData;
import java.net.URL;
import java.util.ResourceBundle;
import de.morpheus.core.CSSContainer;
import de.morpheus.core.Selectable;
import de.morpheus.core.system.XString;
import de.morpheus.core.ui.Confirmator;
import de.morpheus.core.ui.Dialog;
import de.morpheus.core.ui.XWindow;
import de.morpheus.core.ui.XWindow.ConfirmType;
import de.morpheus.core.ui.XWindow.OfType;
import de.morpheus.init.Core;
import de.morpheus.library.PersonData;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
public class PersonBrowserController implements Initializable, CSSContainer, Selectable {
private BaseDataModel baseDataModel = new BaseDataModel();
private PersonData cache = null;
@FXML
private ComboBox<String> cboxSalut;
@FXML
private Button butExit;
@FXML
private Button butNew;
@FXML
private Button butErase;
@FXML
private Button butSearch;
@FXML
private TextField inLastName;
@FXML
private TextField inFirstName;
@FXML
private TextField inAdress1;
@FXML
private TextField inAdress2;
@FXML
private TextField outID;
@FXML
private TextField inZipCode;
@FXML
private TextField inCity;
@FXML
private ComboBox<String> cboxState;
@FXML
private TextField inPhone;
@FXML
private TextField inEmailAdress;
@FXML
private TextField inIban;
@FXML
private TextField inBic;
@FXML
private TextField inBank;
@FXML
private TableView<PersonData> outputTable;
@FXML
private TableColumn<PersonData, Integer> colId;
@FXML
private TableColumn<PersonData, String> colLastName;
@FXML
private TableColumn<PersonData, String> colFirstName;
@FXML
private TableColumn<PersonData, String> colAdress;
@FXML
private TableColumn<PersonData, String> colCountry;
@FXML
private TableColumn<PersonData, Integer> colPLZ;
@FXML
private TableColumn<PersonData, String> colCity;
@FXML
private TableColumn<PersonData, String> colPhone;
@FXML
private TableColumn<PersonData, String> colEMail;
@FXML
private Button butSave;
@FXML
void clearAllFields(ActionEvent event) {
}
@FXML
void doQuery(ActionEvent event) {
refreshTable();
}
@FXML
void execute(MouseEvent event) {
}
@FXML
void exitWindow(ActionEvent event) {
XWindow.close(butExit);
}
@FXML
void openAddWindow(ActionEvent event) {
}
@FXML
void savePerson(ActionEvent event) {
boolean accept = Confirmator.open("Alle Änderungen speichern?", ConfirmType.STANDARD);
if (accept) {
cache.setLastName(XString.read(inLastName));
cache.setFirstName(XString.read(inFirstName));
cache.setAdress1(XString.read(inAdress1));
cache.setAdress2(XString.read(inAdress2));
cache.setZipCode(Integer.parseInt(inZipCode.getText()));
cache.setCity(XString.read(inCity));
cache.setEmailAdress(XString.read(inEmailAdress));
cache.setPhone(XString.read(inPhone));
cache.setIban(XString.read(inIban));
cache.setBic(XString.read(inBic));
cache.setBank(XString.read(inBank));
String transSalut = cboxSalut.getSelectionModel().getSelectedItem();
String transState = cboxState.getSelectionModel().getSelectedItem();
cache.setSalutation(transSalut);
cache.setState(transState);
boolean write = false;
try {
write = baseDataModel.updateSQLDataset(Core.database.getStatement(), cache);
} catch (Exception e) {
Dialog.open(e, "PersonBrowserController.java");
}
if (write) {
Dialog.openSimple(OfType.SUCCESS, "Datensatz aktualisiert");
refreshTable();
} else {
Dialog.openSimple(OfType.ERROR, "Fehlgeschlagen");
}
}
}
private void refreshTable() {
Core.getPersons();
outputTable.setItems(Core.persons);
}
private void showData() {
outID.setText(String.valueOf(cache.getId()));
for (String string : SALUT_STRING) {
if (string.equalsIgnoreCase(cache.getSalutation())) {
int index = SALUT_STRING.indexOf(string);
cboxSalut.getSelectionModel().select(index);
}
}
for (String string : COUNTRY_CHOOSER) {
if (string.equalsIgnoreCase(cache.getState())) {
int index = COUNTRY_CHOOSER.indexOf(string);
cboxState.getSelectionModel().select(index);
}
}
inLastName.setText(cache.getLastName());
inFirstName.setText(cache.getFirstName());
inAdress1.setText(cache.getAdress1());
inAdress2.setText(cache.getAdress2());
inZipCode.setText(String.valueOf(cache.getZipCode()));
inCity.setText(cache.getCity());
inEmailAdress.setText(cache.getEmailAdress());
inPhone.setText(cache.getPhone());
inIban.setText(cache.getIban());
inBic.setText(cache.getBic());
inBank.setText(cache.getBank());
}
@Override
public void initialize(URL location, ResourceBundle resources) {
colId.setCellValueFactory(new PropertyValueFactory<>("id"));
colLastName.setCellValueFactory(new PropertyValueFactory<>("lastName"));
colFirstName.setCellValueFactory(new PropertyValueFactory<>("firstName"));
colAdress.setCellValueFactory(new PropertyValueFactory<>("adress1"));
colCountry.setCellValueFactory(new PropertyValueFactory<>("state"));
colPLZ.setCellValueFactory(new PropertyValueFactory<>("zipCode"));
colCity.setCellValueFactory(new PropertyValueFactory<>("city"));
colPhone.setCellValueFactory(new PropertyValueFactory<>("phone"));
colEMail.setCellValueFactory(new PropertyValueFactory<>("emailAdress"));
cboxSalut.setItems(FXCollections.observableArrayList(SALUT_STRING));
cboxState.setItems(FXCollections.observableArrayList(COUNTRY_CHOOSER));
cboxState.getSelectionModel().select(2);
refreshTable();
outputTable.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() == 2) {
} else {
cache = outputTable.getSelectionModel().getSelectedItem();
showData();
}
}
});
}
}