Hallo
ich bin dabei mit Netbeans 8.1 und SceneBuilder 8.5.0 unter Linux eine erste JavaFX Anwendung zu erstellen.
Grundlage ist eine SplitPane mit einer VBox controlPane und einer VBox dataPane. Startcode:
Mit den Buttons in der schmalen controlPane links werden fxml-Files in den Arbeitsbereich, die dataPane geladen.
Das geschieht mit folgendem Code:
In FXML1 werden Kunden geladen, ausgewählt und dann soll ein in der Tabelle enthaltener Vorgang in FXML2 geöffnet
werden. Dazu werden zunächst KNR und VNR in der Datenbank zwischengespeichert:
Das funktioniert. Nun muss ich einen Weg finden, um die Methode im FXML2 Controller aufzurufen, die die Daten unter
Verwendung der gesicherten KNR und VNR ins FXML2 dataPane lädt. Eine Möglichkeit wäre es, den Methodenaufruf hier anzuhängen:
Dazu müsste jedoch vom Controller von FXML1 aus eine Methode des Contrlollers von FXML2 aufgerufen werden. Bei der Suche nach
einer Lösung habe ich https://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml gefunden, leider
sind dort sehr viele Wege aufgeführt und ich weiß nicht, ob der für meine Konstellation richtige dabei ist.
Noch besser fände ich, wenn man an das Laden von FXML2 mittels eines Focus-Listeners den Methodenaufruf binden
und so die Daten automatisch laden könnte. Ich hoffe, hier wieder Hilfe zu finden.
ich bin dabei mit Netbeans 8.1 und SceneBuilder 8.5.0 unter Linux eine erste JavaFX Anwendung zu erstellen.
Grundlage ist eine SplitPane mit einer VBox controlPane und einer VBox dataPane. Startcode:
Java:
public class SampleFX extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
SplitPane mainPane = (SplitPane) FXMLLoader.load(getClass().getResource("/samplefx/view/main.fxml"));
Scene scene = new Scene(mainPane);
primaryStage.setTitle("JavaFX DLDB Application");
primaryStage.setScene(scene);
primaryStage.setMaximized(true);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
Mit den Buttons in der schmalen controlPane links werden fxml-Files in den Arbeitsbereich, die dataPane geladen.
Das geschieht mit folgendem Code:
Java:
public void setDataPane(Node node) {
dataPane.getChildren().setAll(node);
}
public void openIntern(ActionEvent event) throws IOException {
setDataPane("/samplefx/view/FXML1.fxml");
}
In FXML1 werden Kunden geladen, ausgewählt und dann soll ein in der Tabelle enthaltener Vorgang in FXML2 geöffnet
werden. Dazu werden zunächst KNR und VNR in der Datenbank zwischengespeichert:
Java:
public void saveInDB() {
TablePosition pos = TableVorgang.getSelectionModel().getSelectedCells().get(0);
int row = pos.getRow();
String vnr = TableVorgang.getColumns().get(0).getCellObservableValue(row).getValue().toString();
String sknr = res.getText();
Connection conn = null;
try {
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(jhpn, uname, pw);
String sSQL = "UPDATE print SET knr = " + "'" + sknr + "'," + "vnr = " + "'" + vnr + "'" + "WHERE print.pid = 1 ";
Statement st = conn.createStatement();
st.execute(sSQL);
} catch (ClassNotFoundException | SQLException e) {
JOptionPane.showMessageDialog(null, "Fehler in SaveInDB(): " + e); //muss noch durch Alert ersetzt werden
}
Das funktioniert. Nun muss ich einen Weg finden, um die Methode im FXML2 Controller aufzurufen, die die Daten unter
Verwendung der gesicherten KNR und VNR ins FXML2 dataPane lädt. Eine Möglichkeit wäre es, den Methodenaufruf hier anzuhängen:
Java:
public void openIntern(ActionEvent event) throws IOException {
setDataPane("/samplefx/view/FXML2.fxml");
...load Daten aus der DB ???
}
Dazu müsste jedoch vom Controller von FXML1 aus eine Methode des Contrlollers von FXML2 aufgerufen werden. Bei der Suche nach
einer Lösung habe ich https://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml gefunden, leider
sind dort sehr viele Wege aufgeführt und ich weiß nicht, ob der für meine Konstellation richtige dabei ist.
Noch besser fände ich, wenn man an das Laden von FXML2 mittels eines Focus-Listeners den Methodenaufruf binden
und so die Daten automatisch laden könnte. Ich hoffe, hier wieder Hilfe zu finden.