Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » JavaFX - Aufgabe » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen JavaFX - Aufgabe
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Michael90
unregistriert
JavaFX - Aufgabe Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hey Leute,

ihr müsst mir mal bitte mit JavaFX weiterhelfen :-)

Die Aufgabe:

Realisieren Sie ein Fenster, mit dem ein Anwender die folgenden Daten für eine Person eingeben kann:
Vorname,
Name,
Alter,
Geschlecht
Außerdem sollen die beiden Button OK und Abbrechen vorhanden sein

Eine Grafik, wie ich es mir vorstelle, befindet sich im Anhang.

Meine Ideen:
Was habe ich bisher herausgefunden:

Das Hello-World-Programm habe ich mir heruntergeladen und es läuft auch.

1) Es muss anscheinend eine Art Gitter erstellt werden.

code:
1:
2:
3:
4:
5:
6:
7:
8:
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets (10,20,10,20);
// Button erstellen mit 
JButton btn = new JButton ("Button);


Dann werden noch Label (Anzeige von Text) und Textfield (Eingabemöglichkeit) benötigt.

Aber wie verpacke ich das jetzt alles in einen Code?


Vielen Dank für Eure Hilfe :-)
27.03.2015 00:30
Michael90
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hier noch das Bild :-)

Michael90 hat dieses Bild (verkleinerte Version) angehängt:
JavaFX.png

27.03.2015 00:32
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo Michael90,

Du musst die Elemente erzeugen und dann dem Grid hinzufügen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
        Label lName = new Label("Name");
        grid.add(lName, 0, 0);

        TextField tfName = new TextField();
        grid.add(tfName, 1, 0);

        Label lVorname = new Label("Vorname");
        grid.add(lVorname, 0, 1);

        TextField tfVorname = new TextField();
        grid.add(tfVorname, 1, 1);

        Label lAlter = new Label("Alter");
        grid.add(lAlter, 0, 2);

        TextField tfAlter = new TextField();
        grid.add(tfAlter, 1, 2);


Gruß,

Karlito
27.03.2015 07:55 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Michael90
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank für deine Antwort. Habe das Programm jetzt einmal folgendermaßen geschrieben, allerdings sehe ich nur einen Button, und zwar "Abbrechen". Sorry, dass ich hier so ahnungslos bin, aber an der Uni erklärt dir das ja keiner böse

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
 
public class HelloWorld extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
    	GridPane grid = new GridPane();
    	grid.setHgap(10);
    	grid.setVgap(10);
    	grid.setPadding(new Insets (10,20,10,20));
    	Label lName = new Label("Name");
        grid.add(lName, 0, 0);

        TextField tfName = new TextField();
        grid.add(tfName, 1, 0);

        Label lVorname = new Label("Vorname");
        grid.add(lVorname, 0, 1);

        TextField tfVorname = new TextField();
        grid.add(tfVorname, 1, 1);

        Label lAlter = new Label("Alter");
        grid.add(lAlter, 0, 2);

        TextField tfAlter = new TextField();
        grid.add(tfAlter, 1, 2);
    	primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("OK");
        btn.setText("Abbrechen");
        btn.setOnAction(new EventHandler<ActionEvent>() {
 
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}
27.03.2015 08:16
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Michael90
Sorry, dass ich hier so ahnungslos bin, aber an der Uni erklärt dir das ja keiner böse


Uni ist keine Schule. Wenn Du alles erklärt haben willst, mach eine Berufsausbildung und auch da bekommt man nicht alles vorgekaut...

Zitat:
Original von Michael90
code:
1:
2:
3:
4:
5:
        Button btn = new Button();
        btn.setText("OK");
        btn.setText("Abbrechen");



Wenn Du nur einen Button erzeugst ist klar, dass Dir auch nur einer angezeigt wird. Nur weil Du den Text veränderst, erscheint ja nicht gleich ein neuer Button.

Gruß,

Karlito
27.03.2015 08:33 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Michael90
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

In keinster Weise soll alles vorgekaut werden, aber einem die Aufgabe hinwerfen und sagen: "Macht mal" nur weil der Prof keinen Bock hat, finde ich schon etwas merkwürdig.

Dann würde die Erstellung meiner zwei Button so aussehen:

code:
1:
2:
3:
4:
 Button btn = new Button();
        btn.setText("OK");
        Button btn1 = new Button();
        btn1.setText("Abbrechen");



Aber warum werden mir auch die Textfelder (Vorname, Name, usw.) nicht angezeigt?
27.03.2015 08:38
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Michael90
In keinster Weise soll alles vorgekaut werden, aber einem die Aufgabe hinwerfen und sagen: "Macht mal" nur weil der Prof keinen Bock hat, finde ich schon etwas merkwürdig.


Ich denke das kann von einem Uni-Studenten erwartet werden. So ist es nunmal im echten Leben und gerade in höheren Positionen. Man muss sich selbst kümmern, wie man eine Aufgabe bewältigt. Das bringt einem in der Schule nur leider niemand bei...

Zitat:
Original von Michael90
Dann würde die Erstellung meiner zwei Button so aussehen:

code:
1:
2:
3:
4:
 Button btn = new Button();
        btn.setText("OK");
        Button btn1 = new Button();
        btn1.setText("Abbrechen");



Passt.

Zitat:
Original von Michael90
Aber warum werden mir auch die Textfelder (Vorname, Name, usw.) nicht angezeigt?


Weil Du ein Stackpane einführst und dies verwendest anstatt des Grids, mit dem die Elemente die Du sehen willst verknüpft sind.

Guckst Du hier:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
package sample;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        GridPane grid = new GridPane();
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(10,20,10,20));
        Label lName = new Label("Name");
        grid.add(lName, 0, 0);

        TextField tfName = new TextField();
        grid.add(tfName, 1, 0);

        Label lVorname = new Label("Vorname");
        grid.add(lVorname, 0, 1);

        TextField tfVorname = new TextField();
        grid.add(tfVorname, 1, 1);

        Label lAlter = new Label("Alter");
        grid.add(lAlter, 0, 2);

        TextField tfAlter = new TextField();
        grid.add(tfAlter, 1, 2);
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("OK");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        Button btn1 = new Button();
        btn1.setText("Abbrechen");

        /*StackPane root = new StackPane();
        root.getChildren().add(btn);
        */
        grid.add(btn, 0, 3);
        grid.add(btn1, 1, 3);


        primaryStage.setScene(new Scene(grid, 300, 250));
        primaryStage.show();
    }
}


Gruß,

Karlito
27.03.2015 08:55 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Michael90
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich danke dir :-) Jetzt habe ich was, woran ich mich orientieren kann.
27.03.2015 09:04
Michael90
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi Karlito,

eine Frage hätte ich zu dem Thema noch.

Die folgende Zeile wirft ein paar Fragen auf:


grid.setPadding(new Insets(10,20,10,20));

Der erste Wert gibt mir den Abstand von oben im Gitter an, der letzte den Abstand von der linken Seite. Aber was für einen Sinn haben die mittleren beiden Werte. Die kann ich nach Belieben umändern, sehe aber keine Veränderungen in meinem Fenster verwirrt


Vielen Dank für deine Antwort.
05.04.2015 21:42
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo Michael90,

es sind die Abstände nach rechts und nach unten.

Siehe hier.

Gruß,

Karlito
06.04.2015 11:46 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Michael90
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank für die Antwort. Jetzt ist mir noch etwas aufgefallen.

Wenn ich die eingegebenen Daten der Textfelder ausgeben will, dachte ich mir halt, versuche es mal mit:

code:
1:
2:
3:
4:
5:
@Override
            public void handle(ActionEvent event) 
            {
            System.out.println(lName);   
            }


Da bekomme ich aber dann die Fehlermeldung:

code:
1:
Label@45a95[styleClass=label]'Name'



Ok, dann versuche ich es halt über eine Hilfsmethode, klappte leider auch nicht.

Wo liegt denn da mein Fehler?
06.04.2015 12:10
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo Michael90,

das ist keine Fehlermeldung. Wenn Du
code:
1:
System.out.println(lName);

aufrufst, wird bei lName implizit
code:
1:
lName.toString()


aufgerufen. Was Du willst ist
code:
1:
System.out.println(lName.getText());


Wobei ich annehme, dass Du eigentlich nicht die Beschriftung des Labels haben möchtest sondern den aktuellen Wert des Textfeldes, also

code:
1:
System.out.println(tfName.getText());


Gruß,

Karlito
06.04.2015 12:21 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Michael90
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Wobei ich annehme, dass Du eigentlich nicht die Beschriftung des Labels haben möchtest sondern den aktuellen Wert des Textfeldes


Genau das habe ich gesucht :-)

Vielen Dank Daumen hoch Daumen hoch
06.04.2015 12:33
Tina92
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Auch ich hänge gerade an diesem Thema und habe mir jetzt einmal ein paar Sachen erarbeitet. Könntest du bitte einen Blick darauf werfen, ob das so richtig ist?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage; // Eclipse implemetiert die import - Anweisungen automatisch, aber woher weiß ich diese, wenn 
// ich die Aufgabe auf Papier schreiben muss? 
 
public class HelloWorld extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) { // Gibt den Einstiegspunkt an
        primaryStage.setTitle("Hello World!"); // Titel des Fenster's wird ausgegeben
        Button btn = new Button(); // Button-Objekt wird erzeugt
        btn.setText("Say 'Hello World'"); // Button - Objekt wird angesprochen und mit setText erfolgt Ausgabe
        btn.setOnAction(new EventHandler<ActionEvent>() { // EventHandler ist verantwortlich für die Ausgabe bzw.
        	// Ausführung, wenn der Button gedrückt wird? 
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        
        StackPane root = new StackPane();  // Stack bedeutet Stapel, eventuell um mehrere Fenster übereinander zu lagern
        root.getChildren().add(btn); // Die Zeile ist mir ein Rätsel
        primaryStage.setScene(new Scene(root, 300, 250));	// Muss für die Größe des Fensters zuständig sein
        primaryStage.show(); // wird zur Ausgabe benötigt!
    }
}
13.04.2015 22:36
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Sieht soweit ganz gut aus. Funktionier auch bei mir. Habe es mit IntelliJ getestet. Das ist für Studenten kostenfrei nutzbar. Eclipse habe ich für JavaFX noch nicht probiert.

Wie das mit den imports geregelt ist, musst Du deinen Dozenten fragen. Darüber kann ich keine Aussage machen.

Gruß,

Karlito
15.04.2015 14:00 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » JavaFX - Aufgabe