2017-08-28 2 views
0

Comment puis-je résoudre ce problème, une fenêtre vide ouvre sur l'exécution du projetfenêtre vierge JavaFX

c'est mon principal:

package application; 

import java.io.IOException; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.BorderPane; 


public class Main extends Application { 

private Stage primaryStage; 

@Override 
public void start(Stage primaryStage) { 
    this.primaryStage = primaryStage; 
    primaryStage.show(); 
} 

public void mainWindow() { 
    try { 
     FXMLLoader loader =new FXMLLoader(Main.class.getResource("/MainWindowView.fxml")); 
     AnchorPane pane = loader.load(); 
     MainWindowController mainWindowController = loader.getController(); 
     mainWindowController.setMain(this); 
     Scene scene = new Scene(pane); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

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

ceci est mon point de vue xml:

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

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

<AnchorPane prefHeight="1080.0" prefWidth="1920.0" 
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="application.MainWindowController"> 
<children> 
    <Label fx:id="label" alignment="CENTER" layoutY="420.0" text="Label" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"> 
    <font> 
     <Font size="71.0" /> 
    </font> 
    </Label> 
    <HBox alignment="CENTER" layoutX="774.0" layoutY="540.0" spacing="20.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"> 
    <children> 
     <TextField layoutX="774.0" layoutY="540.0" /> 
     <Button layoutX="1268.0" layoutY="540.0" mnemonicParsing="false" onAction="#handleButton" text="Click Me!" /> 
    </children> 
    </HBox> 
</children> 
</AnchorPane> 

et ceci est mon contrôleur:

package application; 

import java.awt.Label; 
import java.awt.TextField; 

import javafx.fxml.FXML; 

public class MainWindowController { 

    @FXML private Label label; 
    @FXML private TextField field; 


    private Main main; 

    public void setMain(Main main) { 

     this.main = main; 

    } 

    public void handleButton() { 

     String text = field.getText(); 
     label.setText(text); 

    } 

} 

ce lien a un lien vers tous les trois de ces codes dans hastebin si vous voulez être vu de cette façon (https://pastebin.com/raw/hbGBJUng), im nouveau à java et javafx et je ne suis pas sûr de ce que je fais mal comme lorsque je cours le projet dans l'éclipse me montre une fenêtre vide comme quand j'ouvre le xml dans scenebuilder, j'ai ajouté un bouton, une étiquette et un champ de texte.

Répondre

0

Vous venez de montrer scène sans scène, on peut dire scène nulle, donc si vous avez besoin d'enregistrer votre code, je signifie enregistrer votre méthode fenêtre principale, juste passer votre scène comme un paramètre comme celui-ci:

package application; 

import java.io.IOException; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.BorderPane; 


public class Main extends Application { 

private Stage primaryStage; 

@Override 
public void start(Stage primaryStage) { 

mainWindow(primaryStage); 
} 

public void mainWindow(Stage primaryStage) { 
    try { 
     FXMLLoader loader =new FXMLLoader(Main.class.getResource("/MainWindowView.fxml")); 
     AnchorPane pane = loader.load(); 
     MainWindowController mainWindowController = loader.getController(); 
     mainWindowController.setMain(this); 
     Scene scene = new Scene(pane); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

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

Votre code dans mainWindow devrait être en début, au moment où il n'est pas exécuté, ce qui provoque uniquement l'exécution du code de démarrage, donc rien n'est mis en scène et la scène vide est montrée par show.