Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo zusammen,
ich habe in JavaFX ein paar Textfelder und einen Button nun will ich wenn man auf den Button klickt von allen Textfeldern einen Wert zurück bekommen! Ich habe das eben mit der
Code:
.getText();
Methode gemacht doch ich bekomme auch wenn ich etwas eingegeben habe null bzw "" zurück.
Woran kann das liegen?
Hi,
Frage, wieso erstellst du die TextFields final und statisch? Was ist der Grund?
Java:
@FXML
public static TextField name;
@FXML
public static TextField email;
@FXML
public static final TextField serial1 = new TextField();
@FXML
public static final TextField serial2 = new TextField();
@FXML
public static final TextField serial3 = new TextField();
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="310.0" prefWidth="522.0000999999975" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="application.StyleController">
<children>
<TextField fx:id="name" layoutX="182.0" layoutY="108.0" prefWidth="326.0" />
<TextField fx:id="email" layoutX="182.0" layoutY="144.0" prefWidth="326.0" />
<TextField fx:id="serial1" layoutX="182.0" layoutY="181.0" prefWidth="103.0" />
<TextField fx:id="serial2" layoutX="294.0" layoutY="181.0" prefWidth="103.0" />
<TextField fx:id="serial3" layoutX="406.0" layoutY="181.0" prefWidth="103.0" />
<Button layoutX="271.0" layoutY="277.0" mnemonicParsing="false" onAction="#zuMaske1" text="Zurück" />
<Button layoutX="339.0" layoutY="277.0" mnemonicParsing="false" onAction="#installieren" text="Installieren" />
<Button layoutX="430.0" layoutY="277.0" mnemonicParsing="false" onAction="#abbrechen" text="Abbrechen" />
<Label layoutX="14.0" layoutY="14.0" text="Installer AB Cleaner - Konfiguration">
<font>
<Font name="System Bold" size="20.0" />
</font>
</Label>
<Label layoutX="14.0" layoutY="64.0" text="Registrieren Sie nun ihre Software:">
<font>
<Font size="13.0" />
</font>
</Label>
<Label layoutX="14.0" layoutY="111.0" text="Vor- und Nachname" />
<Label layoutX="14.0" layoutY="144.0" text="E-Mail Adresse" />
<Label layoutX="14.0" layoutY="181.0" text="Serial-Key" />
<Label layoutX="13.0" layoutY="236.0" prefWidth="495.0001220703125" text="Klicken Sie auf Installieren um fortzufahren oder auf Abbrechen um das Setup zu beenden" />
</children>
</AnchorPane>
[/XML]
Diese Version funktioniert und gibt in der Console den Text aus, der im Name- Feld eingegeben wurde, wenn auf Installieren gedrückt wird.
Die Probleme in deinem Code:
Java:
@Override
public void initialize(URL url, ResourceBundle rb) {
name = new TextField();
email = new TextField();
}
Da du das Interface Initializable implementierst (mit der Methode initialize die implementiert wird) wird die Methode initialize vor dem Darstellen des Gui ausgeführt. Nun dies ist ok, aber du erstellst hier 2 Instanzen TextField... das ist nicht gut, denn alle componenten (textField, button RadioButton etc) welche im fxml deklariert werden, werden beim Start vom Controller automatisch geladen. Diese dürfen nicht manuell im Controller instanziert werden (naja, ausser man will dynamisch Components erstellen)
Weiter hast du, wie schon erwähnt ganz am Anfang vom Controller die textField definiert und erstellst dabei auch neue Instanzen.
Java:
@FXML
public static TextField name;
@FXML
public static TextField email;
@FXML
public static final TextField serial1 = new TextField();
@FXML
public static final TextField serial2 = new TextField();
@FXML
public static final TextField serial3 = new TextField();
diese braucht es nicht...
um im Controller auf die Elemente, die im fxml deklariert sind zugreifen zu können genügt das hier:
Ersteinmal nennt man keine Methode "main". Das irritiert nur.
Zudem hast du das Prinzip von den "@FXML" nicht so wirklich verstanden. Du darfst du einzelnen Instanzvariablen nicht einfach instanziieren. (Okey, ich habe das selbst noch nie versucht, aber bin mir ziemlich sicher, dass es Murks ist).
Java:
@Override
public void initialize(URL url, ResourceBundle rb) {
name = new TextField();
email = new TextField();
}
Wie genau nutzt du den Controller? Ich wette du nimmst nicht die load-Methode, sondern machst einfach ein "SytleController controller = new StyleController();"?
Danke knilch! Das instanziieren war das Problem jetzt klappt alles wieder!:toll::applaus:
Wie genau nutzt du den Controller? Ich wette du nimmst nicht die load-Methode, sondern machst einfach ein "SytleController controller = new StyleController();"?