2016-07-27 10 views
0

kopiert wurde. Ich mache mein erstes GUI-Programm mit Scene Builder und Java FX in IntelliJ. Ich wollte eine Auswahlbox machen, damit ich in der Java-Dokumentation sah hier:IntelliJ wird kein grundlegendes JavaFX-Programm kompilieren, das aus der Dokumentation

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ChoiceBox.html

ich meine Auswahlbox aus der Dokumentation basierte und festgestellt, dass IntelliJ nicht die Methode erkennen. Also habe ich dann einfach gerade kopiert aus der Dokumentation eingefügt und trotzdem einen Fehler bekommen. Mein Code ist wie folgt:

package sample; 

import javafx.scene.control.ChoiceBox; 

public class Controller { 
ChoiceBox cb = new ChoiceBox(); 
cb.getItems().addAll("item1", "item2", "item3"); 
} 

Die „.getItems()“ in roter Schrift ist und der Fehler ‚kann nicht Symbol getItems lösen‘ ist der Fehler aufgeführt. Jemand anderes kompilierte das Programm und es funktionierte für ihre Maschine.

Antwort

3
cb.getItems().addAll("item1", "item2", "item3"); 

muss in eine Methode eingefügt werden.

Der richtige Code ist:

package sample; 

import javafx.fxml.FXML; 
import javafx.scene.control.ChoiceBox; 

public class Controller { 
    @FXML private ChoiceBox cb; 

    public void initialize() { 
     cb.getItems().addAll("item1", "item2", "item3"); 
    } 
} 

die initialize Methode wird von der FXMLLoader aufgerufen werden, nachdem die Felder zu injizieren.


Edit: Hinzugefügt @ fabian-Kommentare zum FXML Laden/Initialisierung

+0

kühlen. Jetzt muss ich nur noch das funktionieren lassen. Es wird jetzt kompiliert, aber es werden keine Auswahlmöglichkeiten angezeigt, wenn Sie auf die Auswahlbox klicken. Die IDs stimmen überein und das alles. Ich werde raten, dass ich eine andere Methode machen muss, um die Wahlen zu bevölkern oder etwas? – user2778506

+0

@ user2778506: Sie müssen 'cb' als Feld behalten und es mit' @ FXML' annotieren: '@FXML private ChoiceBox cb;', aber initialisieren Sie es nicht (das 'FXMLLoader' tut dies). Beispiele finden Sie hier: http://stackoverflow.com/documentation/javafx/1580/fxml-and-controllers#t=201607272009269385103, suchen Sie einfach nach dem Attribut 'fx: id' in der fxml und den entsprechenden Feldern in den Controllern ... – fabian

+0

@fabian danke für das 'JavaFX'-Zeug, ich habe die Plattform noch nie wirklich benutzt :) – Jeeter