# Adressadministration mit Java und mySQL



## Phips_CH (3. Mrz 2019)

Hallo zusammen

Ich bin dabei mir Java anzueignen.
Ich habe mir schon diverse Tutorials angesehen, und auch verstanden.
Ich habe vorher schon mal mit PHP und mySQL etwas gemacht.

Nun möchte ich mit Java eine Anwendung programmieren, um eine Adressadministration eines Vereins oder kleinen Firma zu realisieren. Später sollen Arbeitseinsätze an diversen Events dazu kommen.
Allerdings habe ich den Einstig in die Umsetzung für mein Vorhaben noch nicht gefunden.
Ich denke das es etwas mit JavaFX zutun hat.
Verstehen ich das richtig, dass ich zum Beispiel im Scene Builder ein Formular mit allen TextFeldern, Buttons etc. erstellen muss?
Was mir fehlt ist, wie ich bei einem solchen Projekt vorgehen soll. 
Wie erhalte ich danach einen Datensatz, den ich zum Beispiel dann aktualisieren kann. Klar mit eine SELCT abfrage. Aber wo soll ich diese einfügen?

Kann mir jemand einem Tipp geben wo ich diese Informationen her bekomme?
Ich bin auch dabei das Buch: "Programmieren lernen mit Java" von Hans-Peter Hablitz zu lesen. 

Ich  währe echt froh, wenn ihr mir da weiterhelfen könntet.
Besten Dank schon jetzt.


----------



## mihe7 (3. Mrz 2019)

Kurze Antwort: Du erstellst Dir erst einmal ein Modell des Problembereichs (Domäne). Das implementierst Du und wenn alles läuft, wie es soll, bindest Du das GUI an.


----------



## Phips_CH (3. Mrz 2019)

mihe7 hat gesagt.:


> Du erstellst Dir erst einmal ein Modell des Problembereichs (Domäne).


Sorry wie meinst du das?


----------



## mihe7 (3. Mrz 2019)

Damit meine ich, dass Du Dir anschauen musst, welche Klassen, Felder etc. Du brauchst und wie diese zusammenhängen, um die fachliche Seite (Verwaltung von Adressen) der Anwendung zu beschreiben. Hier geht es gerade nicht um das UI, sondern um den Kern des Problems. 

Beispielsweise wird es - abhängig von Deinen Anforderungen - nicht mit einer Klasse "Adresse" getan sein. Du kannst Personen haben, die mehrere Adressen haben. Es kann unterschiedliche Arten von Adressen geben usw. Dann ist die Frage, wie z. B. eine Adresse, eine Person etc. beschrieben werden kann. Es kann Benutzer geben usw. usw.


----------



## Phips_CH (3. Mrz 2019)

Wenn ich mir diese Überlegungen mache, wie gehe ich da vor? Was muss ich beachten? 
Ich habe mir gedacht, dass jede Person in der Adressverwaltung einen Datensatz in meiner mySQL DB ist. Mehrere Adressen sind in verschiedenen Feldern gespeichert. Aber zum Beispiel bei der Anrede mache ich eine Verknüpfungstabelle.

Sorry meine Fragerei. Aber ich da vorgehe resp. anfangen soll, habe ich nichts im Netz gefunden. Oder ich habe am falschen Ort grsucht.


----------



## mihe7 (3. Mrz 2019)

Du brauchst Grundlagen, nicht nur in Java sondern auch in der Objektorientierung. Sonst wirst Du keine große Freude haben. Da kann Dir @Javinner bestimmt den ein oder anderen Tipp geben.


----------



## Javinner (5. Mrz 2019)

Hey, zum Thema Datenbank kann ich nicht viel sagen, damit habe ich mich noch nicht ausreichend beschäftigt. Zum Rest deiner Anfrage kann ich dir das Buch "Entwurfsmuster von Kopf bis Fuß" ans Herz legen, ist wirklich ein tolles Buch, auch wenn der Still es am Anfang etwas anderes glauben lässt. Was du brauchst, ist die Struktur der Klassen, welche sich leicht pflegen und erweitern lässt. Sonst kann ich dir das Buch "Objektorientierte Programmierung" vom Rheinwerkverlag empfehlen, welches jedoch teils sehr trocken ist,  wie ich fand. Als Standartwerk wird "Java ist auch eine Insel" betrachtet und ist online kostenlos verfügbar. Ebenso ist das Buch "Effective Java" ziemlich cool, jedoch ist Englisch hier Pflicht. Sonst empfehle ich dir den Forum hier, falls du Probleme hast. Wenn du selbst dran bleibst, wird dir hier sehr viel und breitgefächert geholfen.

Nebenbei: Swing ist tot, lang lebe Swing  Wenn du jedoch auf JavaFX bestehst, dann kannst du dir "Learn JavaFX 8" oder "Mastering JavaFX 10" anschauen, habe es kurz überflogen und es handelt sich dem Anschein nach um die Grundlagenbücher.


----------



## Phips_CH (6. Mrz 2019)

Dann werde ich mir die Bücher "Entwurfsmuster von Kopf bis Fuß" und "Objektorientierte Programmierung" zu gemühte führen.



Javinner hat gesagt.:


> Nebenbei: Swing ist tot, lang lebe Swing  Wenn du jedoch auf JavaFX bestehst, dann kannst du dir "Learn JavaFX 8" oder "Mastering JavaFX 10" anschauen, habe es kurz überflogen und es handelt sich dem Anschein nach um die Grundlagenbücher.



Ich habe mich noch nicht für JavaFX entschieden. Ich bin im Netz auf JavaFX gestossen. 
Du würdest mir eher Swing vorschlagen?


----------



## mihe7 (6. Mrz 2019)

Es geht darum, dass Du Dich erstmal mit dem objektorientierten Paradigma auseinandersetzt. Aus Sicht der Anwendung sind sowohl UI als auch DB Implementierungsdetails. Der Kern der Anwendung funktioniert unabhängig davon.


----------



## Javinner (6. Mrz 2019)

Phips_CH hat gesagt.:


> Du würdest mir eher Swing vorschlagen?


Da kann ich dir kein Rat geben. Mit JavaFX habe ich bis jetzt nicht gearbeitet, nur Swing und Swing wird seit Jahren ein Tod prophezeit, doch dieser ist nach wie vor am Leben. Jedoch hat @mihe7 Recht, lerne erst die Grundlagen.


----------



## Trjavnamen (16. Apr 2019)

Schritt 1. neue Eclipse IDE für Java herunterladen
schritt 2. neuste Java herunterladen
schritt3 sceneBuilder herunterladen(extra programm für leichteres erstellen derFenster)
schritt4 in Eclipse über Marktpaces die Erweiterungen für JavaFX und was sonst noch wichtig erscheint zu installieren
schritt5 "Main" Klasse erstellen.
schritt6"MainWindowController" erstellen
schritt7"MainWindow.fxml"erstellen
dieses in die Main kopieren

```
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;


public class Main extends Application {
    
    private Stage primaryStage;
            

        public void start(Stage primaryStage) {
            this.primaryStage = primaryStage;
            mainWindow();
        }    
            
            
        
        public void mainWindow(){
    try {
            FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fmxl"));
            AnchorPane pane = loader.load();
            
            
            
            primaryStage.setMinHeight(400.00);
            primaryStage.setMinWidth(400.00);
            
            MainWindowController mainWindowController = loader.getController();
            mainWindowController.setMain(this);
            
         Scene scene=new Scene(pane);
         scene.getStylesheets().add("path/application.css");
        primaryStage.setScene(scene);
        primaryStage.show();
        
        
    }catch (IOException e ){
        e.printStackTrace();    
        }
    }
        public static void  main (String[] args) {
        launch(args);
    }
}
```
dieses in die MainWindowController einfügen und in der ersten zeile die package korrigieren

```
import application5.Main;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class MainWindowController {
public Main main;   
public void setMain(Main main){
    this.main = main;}
@FXML
private Button Print;

@FXML
private TextField field001;

@FXML
private TextField text33;

@FXML
private Button clear;

@FXML
private ChoiceBox<String> choiceBox ;
ObservableList<String> availableChoices = FXCollections.observableArrayList("apples", "oranges");
String selectedChoice = choiceBox.getSelectionModel().getSelectedItem();



@FXML   
private Label label;

@FXML
void choisontcht001(ActionEvent event) {

}

    @FXML
    void handeltext(ActionEvent event) {

    }

    @FXML
    void handelprint(ActionEvent event) {
   }

    @FXML
    void handelclir2(ActionEvent event) {

    }

    @FXML
    void handelfill(ActionEvent event) {

    }
}
```
und dieses in die MainWindow.fxml einfügen

```
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane cache="true" cacheHint="QUALITY" prefHeight="400.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application5.MainWindowController">
  <!-- TODO Add Nodes -->
  <children>
    <VBox id="VBox" alignment="CENTER" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
      <children>
        <ChoiceBox fx:id="choiceBox" onInputMethodTextChanged="#choisontcht001" prefWidth="150.0" />
        <Label fx:id="label" alignment="CENTER" text="Label" />
        <TextField fx:id="field001" alignment="CENTER" onMouseMoved="#handeltext" prefWidth="200.0" />
        <Button fx:id="Print" blendMode="GREEN" cache="true" cacheHint="QUALITY" mnemonicParsing="false" onAction="#handelprint" text="Print" textOverrun="WORD_ELLIPSIS" />
        <Button fx:id="clear" blendMode="GREEN" cache="true" cacheHint="QUALITY" mnemonicParsing="false" onAction="#handelclir2" text="clear" />
        <TextField fx:id="text33" alignment="CENTER" onMouseExited="#handelfill" prefWidth="200.0" />
      </children>
    </VBox>
  </children>
</AnchorPane>
```


----------



## mrBrown (16. Apr 2019)

Trjavnamen hat gesagt.:


> Schritt 1. neue Eclipse IDE für Java herunterladen
> schritt 2. neuste Java herunterladen
> schritt3 sceneBuilder herunterladen(extra programm für leichteres erstellen derFenster)
> schritt4 in Eclipse über Marktpaces die Erweiterungen für JavaFX und was sonst noch wichtig erscheint zu installieren
> ...


Das scheitert btw daran, dass JavaFX mit "neuste Java herunterladen" noch nicht verfügbar ist, das muss man zusätzlich einbinden.


----------



## Trjavnamen (17. Apr 2019)

ok dann die mir letztb ekannte jdk1.8.0._130 ,Scene Builder 2 (bzw wenn win10oder die geforderte FRamwork installiert ist "scene builder7"


----------



## mrBrown (17. Apr 2019)

Trjavnamen hat gesagt.:


> ok dann die mir letztb ekannte jdk1.8.0._130 ,Scene Builder 2 (bzw wenn win10oder die geforderte FRamwork installiert ist "scene builder7"


Dann hast du nur Java 9, 10, 11, und 12 verpasst


----------



## maGG (17. Apr 2019)

Du brauchst ein Programm zum Erstellen der DB und ein Programm zum schreiben deines Programms. SQLiteStudio für die DB und Eclipse oder Netbeans zum Schreiben deines Programms. Zusätzlich dazu brauchst du noch ein Java JDK (ein Developer KIT), welches du dir runterladen und installieren musst - ist alles free to use.

Dann musst du dir eine Datenbankstruktur überlegen und diese in SQLiteStudio erstellen. Achte dabei vor allem darauf, dass du deine Adressen möglichst atomar speicherst, also zerlegst. z.B. in Straße, PLZ, Ort, etc.

Danach bauchst du dir eine GUI (Graphical User Interface) in dem Builder und kannst so deine Tabell z.B. in einer jTable anzeigenlassen. Wie du diese dann editierbar machst bleibt dir überlassen. Die einfachste Methode wäre wohl Textfelder zu erstellen, die mit einem Action Event mit Werten aus der Tabelle befüllt werden und diese dann mit Buttons "update, löschen, neu" auf deine DB wirken zu lassen.

Ich habe auch grad mein eigenes Projekt, da kannst du ja mal reinschauen: https://www.java-forum.org/thema/2-combobox-en.184473/post-1179758


----------

