2017-04-06 2 views
0

document FXML:Comment ajouter un groupe à la scène dans JavaFX?

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

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import java.net.URL?> 

<AnchorPane id="AnchorPane" fx:id="apMain" prefHeight="600" prefWidth="600" xmlns:fx="http://javafx.com/fxml/1" fx:controller="funkcje.FXMLDocumentController"> 
    <stylesheets> 
    <URL value="@style.css" /> 
    </stylesheets> 
    <children> 
     <Button prefHeight="20" prefWidth="70" layoutX="265" layoutY="550" text="Narysuj" onAction="#handleButtonAction" fx:id="button" /> 
     <Label layoutX="30" layoutY="500" minHeight="16" minWidth="69" text="Podaj A:" fx:id="labelA" /> 
     <TextField layoutX="105" layoutY="503" prefHeight="20" prefWidth="90" fx:id="textfieldA" /> 
     <Label layoutX="200" layoutY="500" minHeight="16" minWidth="69" text="Podaj B:" fx:id="labelB" /> 
     <TextField layoutX="275" layoutY="503" prefHeight="20" prefWidth="90" fx:id="textfieldB" /> 
     <Label layoutX="370" layoutY="500" minHeight="16" minWidth="69" text="Podaj miare:" fx:id="labelC" /> 
     <TextField layoutX="483" layoutY="503" prefHeight="20" prefWidth="90" fx:id="textfieldC" /> 
    </children> 
</AnchorPane> 

contrôleur FXML:

package funkcje; 

    import java.net.URL; 
    import java.util.ResourceBundle; 
    import javafx.event.ActionEvent; 
    import javafx.fxml.FXML; 
    import javafx.fxml.Initializable; 
    import javafx.scene.Group; 
    import javafx.scene.control.Label; 
    import javafx.scene.layout.AnchorPane; 
    import javafx.scene.layout.Pane; 
    import javafx.scene.paint.Color; 
    import javafx.scene.shape.Line; 
    import javafx.scene.shape.Rectangle; 

    /** 
    * 
    * 
    */ 
    public class FXMLDocumentController implements Initializable { 

     @FXML 
     private Label label; 
     private AnchorPane apMain; 

     @FXML 
     private void handleButtonAction(ActionEvent event) { 
      System.out.println("You clicked me!"); 
      label.setText("Hello World!"); 
     } 

     @Override 
     public void initialize(URL url, ResourceBundle rb) { 
      // TODO 
      Group group = new Group(); 
      Rectangle r2 = new Rectangle(250, 25, 100, 140); 
      r2.setStroke(Color.BLACK); 
      r2.setFill(null); 
      r2.setStrokeWidth(3); 
      r2.setArcWidth(25); 
      r2.setArcHeight(25); 
      group.getChildren().add(r2); 

      apMain.getChildren().add(group); 

     }  

    } 

main app: 

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package funkcje; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Group; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Line; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

/** 
* 
* 
*/ 
public class Funkcje extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 
     Scene scene = new Scene(root); 
     stage.setResizable(false); 
     stage.setTitle("Funkcje"); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

Ici, il est. Aidez moi. Il y a du texte, je ne peux pas le poster, parce que j'ai trop de code et moins de texte. La voici. Aidez moi. Il y a du texte, je ne peux pas le poster, parce que j'ai trop de code et moins de texte. La voici. Aidez moi. Il y a du texte, je ne peux pas le poster, parce que j'ai trop de code et moins de texte. La voici. Aidez moi. Il y a du texte, je ne peux pas le poster, parce que j'ai trop de code et moins de texte.

+0

http://stackoverflow.com/questions/18152639/javafx-adding-a-new-node-to -scene-in-java-code-when-scene-is-origin-loaded – Misys

+0

Une scène n'a qu'un seul nœud: la racine. Si vous voulez ajouter plus de nœuds, vous devez les ajouter à la racine. (Vous avez besoin de la racine pour être un 'Pane' ou un' Group' afin d'appeler 'getChildren(). Add (canva)'.) –

+0

J'ai fait la solution du lien ci-dessus, mais le rectangle ne montre pas. regarder le code dans le message – Sleeper

Répondre

0

Dans votre changement de fichier FXMLDocumentController.java:

private AnchorPane apMain; 

Pour:

@FXML private AnchorPane apMain; 
+0

Enfin, j'ai mon rectangle dessiné! merci, désolé de demander des choses simples, mais je suis nouveau à javafx – Sleeper

+0

si la réponse est correcte l'accepter. – Sedrick