Hallo Leute,
ich hoffe ihr könnt mir helfen.
Ich möchte von Fenster 1 ein Array zur Fenster 2 übertragen. Das klappt nicht.
Aber ich kann von Fenster 2 ein Obekt in dem Array von Fenster 1 speichern.
Das ist Fenster 1
[/QUOTE]
Das ist Fenster 2
[/QUOTE]
Wisst ihr zufällig warum es nicht klappt?
Und wie kann man es lösen?
ich hoffe ihr könnt mir helfen.
Ich möchte von Fenster 1 ein Array zur Fenster 2 übertragen. Das klappt nicht.
Aber ich kann von Fenster 2 ein Obekt in dem Array von Fenster 1 speichern.
Das ist Fenster 1
Java:
import Praktikum01.FlowchartPane;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.stage.Modality;
import javafx.stage.Stage;
/**
* FXML Controller class
*
*/
public class HauptfensterController implements Initializable {
public Stage primaryStage;
// private ArrayList<ArtikelAnlegen> artikel = new ArrayList<>();
private ObservableList<ArtikelAnlegen> artikel = FXCollections.observableArrayList();
@Override
public void initialize(URL url, ResourceBundle rb) {
}
public void setPrimaryStage(Stage stage){
this.primaryStage = stage;
}
// public ArrayList<ArtikelAnlegen> gibArtikelListe() {
// return this.artikel;
// }
public ObservableList<ArtikelAnlegen> gibArtikelListe(){
return this.artikel;
}
@FXML
private void artikelAnlegen() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(start.class.getResource("Artikelfenster.fxml"));
Parent artikelFenster = loader.load();
Stage artikelStage = new Stage();
artikelStage.setTitle("Artikel anlegen");
artikelStage.initModality(Modality.WINDOW_MODAL);
artikelStage.initOwner(primaryStage);
Scene scene = new Scene(artikelFenster);
artikelStage.setScene(scene);
ArtikelfensterController controller = loader.getController();
controller.setPrimaryStage(artikelStage);
controller.setMainApp(this);
controller.setArtikelArray(this.artikel);
controller.setZaehler(this.artikel.size()+1);
System.out.println(this.artikel.size()+"haupt");
artikelStage.showAndWait();
}
catch(IOException e) {
e.printStackTrace();
}
}
@FXML
private void handleInfo(ActionEvent event) {
Alert meldung = new Alert(Alert.AlertType.INFORMATION);
meldung.setHeaderText("");
meldung.setTitle("Info");
meldung.setContentText("");
meldung.showAndWait();
}
}
Das ist Fenster 2
Java:
import java.net.URL;
import java.time.Clock;
import java.util.ArrayList;
import java.util.Observer;
import java.util.Optional;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.ToggleGroup;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
/**
* FXML Controller class
*
*/
public class ArtikelfensterController implements Initializable {
/**
* Initializes the controller class.
*/
public Stage primaryStage;
private HauptfensterController mainApp;
@FXML
private TextField artikelNummer, artikelBezeichnung, artikelBeschreibung, artikelID, nettopreis, bruttopreis;
private TextField umgerechneterPreis;
private Label changedPreis;
@FXML
private TextArea technischeDetails;
@FXML
private ComboBox comboKategorie;
@FXML
private Label tgPreis;
@FXML
private RadioButton radioNetto, radioBrutto;
@FXML
private ToggleGroup togglePreis;
@FXML
private Button speicherm;
private boolean ist = true;
private int zaehler;
// private ArrayList<ArtikelAnlegen> artikel = new ArrayList<>();
private ObservableList<ArtikelAnlegen> artikel = FXCollections.observableArrayList();
public void setMainApp(HauptfensterController mainApp) {
this.mainApp = mainApp;
// mainApp.gibArtikelListe().addListener(new ListChangeListener() {
//
// @Override
// public void onChanged(ListChangeListener.Change change) {
//// System.out.println("Detected a change! " + durchschnittlicheTemperatur.textProperty().getValue());
//// berechneDurchschnitt();
//
// }
// });
}
// public void setArtikelArray(ArrayList<ArtikelAnlegen> artikel){
// this.artikel=artikel;
// }
public void setArtikelArray(ObservableList<ArtikelAnlegen> artikel){
this.artikel=artikel;
}
public void setZaehler(int zaehler){
this.zaehler=zaehler;
}
public void setPrimaryStage(Stage stage) {
this.primaryStage = stage;
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (wurdeGeschrieben()) {
primaryStage.close();
} else {
event.consume();
primaryStage.show();
}
}
});
}
@Override
public void initialize(URL url, ResourceBundle rb) {
vorbelegen();
this.artikelNummer.setPromptText("zzz-zzzz-zzz");
this.comboKategorie.setPromptText("-Bitte wählen-");
this.artikelNummer.setTextFormatter(new TextFormatter<>(new Artikelnummer()));
this.bruttopreis.setTextFormatter(new TextFormatter<>(new DezimalZahlen()));
this.nettopreis.setTextFormatter(new TextFormatter<>(new DezimalZahlen()));
// this.artikel=this.mainApp.gibArtikelListe();
System.out.println(this.artikel.size()+"artikel");
artikelID.setText("AR2017"+zaehler+1);
this.nettopreis.textProperty().addListener((observable, oldValue, newValue) -> {
if(this.radioNetto.isSelected()){
if(this.nettopreis.getText().equals("")){
bruttopreis.setText("");
}
String s1 = nettopreis.getText();
try {
String s2 = s1.replace(',', '.');
double nettoWert = Double.parseDouble(s2) * 1.19;
nettoWert = runden(nettoWert);
bruttopreis.setText(String.valueOf(nettoWert).replace('.', ','));
} catch (NumberFormatException e) {
System.out.println("");
}
}
});
this.bruttopreis.textProperty().addListener((observable, oldValue, newValue) -> {
if(this.radioBrutto.isSelected()){
String s3 = bruttopreis.getText();
String s4 = s3.replace(',', '.');
try {
double bruttoWert = Double.parseDouble(s4) / 1.19;
bruttoWert = runden(bruttoWert);
nettopreis.setText(String.valueOf(bruttoWert).replace('.', ','));
} catch (NumberFormatException e) {
System.out.println("");
}
}
});
}
private void vorbelegen() {
// comboKategorie.getItems().add("---Bitte wählen---");
comboKategorie.getItems().add("Material");
comboKategorie.getItems().add("Zubehör");
// comboKategorie.getSelectionModel().selectFirst();
bruttopreis.setDisable(true);
nettopreis.setDisable(true);
artikelID.setText("AR20171");
artikelID.setDisable(true);
}
@FXML
private void handlePreis(ActionEvent event) {
if (event.getSource().equals(radioNetto)) {
bruttopreis.setDisable(true);
nettopreis.clear();
bruttopreis.clear();
nettopreis.setDisable(false);
} else {
nettopreis.setDisable(true);
nettopreis.clear();
bruttopreis.clear();
bruttopreis.setDisable(false);
}
}
private double runden(double wert) {
double gerundet = (int) (wert * 100 + 0.5);
gerundet = gerundet / 100;
return gerundet;
}
public boolean formularSpeichern() {
ist = true;
if (this.artikelNummer.getText().equals("")) {
ist = false;
showInformationAlert("Bitte Artikelnummer ausfüllen");
} else if (this.artikelBezeichnung.getText().equals("")) {
ist = false;
showInformationAlert("Bitte Artikelbezeichung ausfüllen");
} else if (this.comboKategorie.getSelectionModel().getSelectedItem() != "Material"
&& this.comboKategorie.getSelectionModel().getSelectedItem() != "Zubehör") {
ist = false;
showInformationAlert("Bitte wählen Sie eine Kategorie");
} else if (this.radioBrutto.isSelected() && this.bruttopreis.getText().equals("")) {
ist = false;
showInformationAlert("Bitte bruttopreis eingeben");
} else if (this.artikelBezeichnung.getText().equals("")) {
ist = false;
showInformationAlert("Bitte schreiben Sie in die Artikel Bezeichnung was");
} else if (!this.radioNetto.isSelected() && !this.radioBrutto.isSelected()) {
ist = false;
showInformationAlert("Bitte wählen Sie ob Netto,- oder Bruttopreis");
} else if (this.radioNetto.isSelected() && this.nettopreis.getText().equals("")) {
ist = false;
showInformationAlert("Bitte Nettopreis eingeben");
} else if (this.radioBrutto.isSelected() && this.bruttopreis.getText().equals("")) {
ist = false;
showInformationAlert("Bitte Bruttopreis eingeben");
} // if (ist && this.radioNetto.isSelected() && !this.nettopreis.getText().equals("")) {
//
// String s1 = nettopreis.getText();
// String s2 = s1.replace(',', '.');
//
// double nettoWert = Double.parseDouble(s2) * 1.19;
// nettoWert = runden(nettoWert);
// bruttopreis.setText(String.valueOf(nettoWert).replace('.', ','));
// }
// if (ist && this.radioBrutto.isSelected() && !this.bruttopreis.getText().equals("")) {
//
// String s1 = bruttopreis.getText();
// String s2 = s1.replace(',', '.');
//
// double bruttoWert = Double.parseDouble(s2) / 1.19;
//
// bruttoWert = runden(bruttoWert);
// nettopreis.setText(String.valueOf(bruttoWert).replace('.', ','));
// }
else if (this.artikelNummer.getText().length() < 12) {
ist = false;
showInformationAlert("Bitte Artikelnummer muss 10 stellig sein und muss folgender Format besitzen zzz-zzzz-zzz");
} else if (!(this.nettopreis.getText().equals(""))) {
if (Double.parseDouble(nettopreis.getText()) > 1000) {
showConfirmationAlert2();
}
}
return ist;
}
public boolean wurdeGeschrieben() {
ist = true;
if (!(this.artikelNummer.getText().equals(""))) {
ist = false;
showConfirmationAlert();
} else if (!(this.artikelBezeichnung.getText().equals(""))) {
ist = false;
showConfirmationAlert();
} else if (!(this.artikelBeschreibung.getText().equals(""))) {
ist = false;
showConfirmationAlert();
} else if (!(this.comboKategorie.getSelectionModel().getSelectedItem() != "Material"
&& this.comboKategorie.getSelectionModel().getSelectedItem() != "Zubehör")) {
ist = false;
showConfirmationAlert();
} else if (!(this.technischeDetails.getText().equals(""))) {
ist = false;
showConfirmationAlert();
} else if ((this.radioBrutto.isSelected())) {
ist = false;
showConfirmationAlert();
} else if ((this.radioNetto.isSelected())) {
ist = false;
showConfirmationAlert();
}
return ist;
}
private void showConfirmationAlert() {
// Alert meldung = new Alert(Alert.AlertType.CONFIRMATION);
Alert meldung = new Alert(Alert.AlertType.CONFIRMATION, "Wollen Sie wirklich beenden?", ButtonType.NO, ButtonType.YES);
/* Aenderung der Modalitaet auf eine "nicht-modale" Meldung. */
// meldung.initModality(Modality.NONE);
/* "Entfernt" den Header und setzt das Symbol links vom Inhalt. */
meldung.setHeaderText("");
meldung.setTitle("Formular Abbrechen");
// meldung.setContentText(CONFIRMATION_TEXT);
// meldung.show(); //Programm laeuft weiter
// System.out.println("Programm läuft weiter");
Optional<ButtonType> antwort = meldung.showAndWait(); // Programm wartet vor naechster Zeile
if (antwort.isPresent()) {
if (antwort.get().equals(ButtonType.YES)) {
/* Anwendung schliessen. */
ist = true;
} else {
ist = false;
}
}
}
private void showConfirmationAlert2() {
// Alert meldung = new Alert(Alert.AlertType.CONFIRMATION);
Alert meldung = new Alert(Alert.AlertType.WARNING, "Der Preis liegt bei 1000€. Möchten Sie fortsetzen?", ButtonType.NO, ButtonType.YES);
/* Aenderung der Modalitaet auf eine "nicht-modale" Meldung. */
// meldung.initModality(Modality.NONE);
/* "Entfernt" den Header und setzt das Symbol links vom Inhalt. */
meldung.setHeaderText("");
meldung.setTitle("Formular Abbrechen");
// meldung.setContentText(CONFIRMATION_TEXT);
// meldung.show(); //Programm laeuft weiter
// System.out.println("Programm läuft weiter");
Optional<ButtonType> antwort = meldung.showAndWait(); // Programm wartet vor naechster Zeile
if (antwort.isPresent()) {
if (antwort.get().equals(ButtonType.YES)) {
/* Anwendung schliessen. */
ist = true;
} else {
ist = false;
}
}
}
private void showInformationAlert(String meldung2) {
Alert meldung = new Alert(Alert.AlertType.WARNING);
// Image image = new Image("/ok.png");
// ImageView imageScale = new ImageView(image);
// imageScale.setFitHeight(20);
// imageScale.setFitWidth(20);
// meldung.setGraphic(imageScale);
meldung.setHeaderText("");
meldung.setTitle("Bitte ausfüllen");
meldung.setContentText(meldung2);
meldung.showAndWait();
}
@FXML
private void handleNettopreis(ActionEvent event) {
String s1 = nettopreis.getText();
String s2 = s1.replace(',', '.');
double nettoWert = Double.parseDouble(s2) * 1.19;
nettoWert = runden(nettoWert);
bruttopreis.setText(String.valueOf(nettoWert).replace('.', ','));
}
@FXML
private void handleBruttopreis(ActionEvent event) {
// this.bruttopreis.textProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
// double bruttoWert = Double.parseDouble(bruttopreis.getText()) / 1.19;
// bruttoWert = runden(bruttoWert);
// nettopreis.setText(String.valueOf(bruttoWert));
//
// });
//
String s1 = bruttopreis.getText();
String s2 = s1.replace(',', '.');
double bruttoWert = Double.parseDouble(s2) / 1.19;
bruttoWert = runden(bruttoWert);
nettopreis.setText(String.valueOf(bruttoWert).replace('.', ','));
}
private void bruttopreis(){
String s1 = bruttopreis.getText();
String s2 = s1.replace(',', '.');
double bruttoWert = Double.parseDouble(s2) / 1.19;
bruttoWert = runden(bruttoWert);
nettopreis.setText(String.valueOf(bruttoWert).replace('.', ','));
}
@FXML
private void handleAbbrechen(ActionEvent event) {
if (wurdeGeschrieben()) {
this.primaryStage.close();
}
}
@FXML
private void handleSpeichern(ActionEvent event) {
if (formularSpeichern()) {
ArtikelAnlegen artikel = new ArtikelAnlegen();
artikel.setArtikelnummer(this.artikelNummer.getText());
artikel.setartieklID(this.artikelID.getText());
artikel.setBeschreibung(this.artikelBeschreibung.getText());
artikel.setBezeichnung(this.artikelBezeichnung.getText());
artikel.setKategorie((String) this.comboKategorie.getSelectionModel().getSelectedItem());
artikel.setTechnischedetails(this.technischeDetails.getText());
artikel.setPreisNetto(this.nettopreis.getText());
mainApp.gibArtikelListe().add(artikel);
this.primaryStage.close();
}
}
}
Wisst ihr zufällig warum es nicht klappt?
Und wie kann man es lösen?