2017-06-20 6 views
1

J'ai ce bouton où quand je veux ajouter dynamiquement des images à mon AnchorPane, mais actuellement il ne fonctionne pas comme prévu. J'essaie de charger une image à l'intérieur de l'étiquette JavaFX, voici mon code.charger des images dynamiquement dans JavaFX à Anchorpane

FXMLDocumentController.java

public class FXMLDocumentController implements Initializable { 

    @FXML 
    private Label label; 
    public AnchorPane pane; 

    @FXML 
    private void handleButtonAction(ActionEvent event) throws IOException { 

     // BufferedImage image = ImageIO.read(new File("2d.png")); 
     Label label = new Label(); 
     Image image = new Image(getClass().getResourceAsStream("2d.png")); 
     label = new Label("search", new ImageView(image)); 
     pane.getChildren().addAll(label);  
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // TODO 
    }  

} 

FXMLDocument.fxml

<AnchorPane id="AnchorPane" fx:id="AnchorPane" prefHeight="521.0" prefWidth="548.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.111" fx:controller="testingcards.FXMLDocumentController"> 
    <children> 
     <Button fx:id="button" layoutX="126" layoutY="90" onAction="#handleButtonAction" text="Click Me!" /> 
     <Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" /> 
     <Label layoutX="143.0" layoutY="366.0" prefHeight="121.0" prefWidth="69.0" text="Label" /> 
    </children> 
</AnchorPane> 

Erreur

Exception dans le thread "JavaFX application Fil" java.lang.RuntimeException: java.lang .reflect.InvocationTargetException à javafx.fxml.FXMLLoader $ MethodHandler.invoke (FXMLLoader.java:1774) à javafx.fxml.FXMLLoader $ ControllerMethodEventHandler.handle (FXMLLoader.java:1657) à com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler .java: 86) à com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:238) à com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191) à com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:58) à com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) à com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) à com.sun.javafx .event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) à com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) à com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl .java: 114) à com.sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74) à com.sun.javafx.event.EventUtil.fireEvent (EventUtil.java:49) à javafx.event.Event.fireEvent (Event.java:198) à javafx.scene.Node.fireEvent (Node.java:8411) à javafx.scene.control.Button.fire (Button.java:185) à com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased (ButtonBehavior.java:182) à com.sun.javafx.scene.control.skin.BehaviorSkinBase $ 1.handle (BehaviorSkinBase.java:96) à com.sun.javafx.scene.control.skin.BehaviorSkinBase 1.handle $ (BehaviorSkinBase.java:89) à com.sun.javafx.event.CompositeEventHandler $ NormalEventHandlerRecord.handleBubblingEvent (CompositeEventHandler.java:218) à com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler.ja VA: 80) à com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:238) à com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191) à com .sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java: 58) à com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) à com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) à com .sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) à com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) à com.sun.javafx.event.EventDispatchChainImpl .dispatchEvent (EventDispatchChainImpl.java:114) à com.sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74) à com.sun.javafx.event.EventUtil.fireEvent (EventUtil.java:54) à javafx.event.Event.fireEvent (Event.java:198) au javafx.scene.Scene $ MouseHandler.process (Scene.java:3757) au javafx.scene.Scene $ MouseHandler.access $ 1500 (Scene.java: 3485) à javafx.scene.Scene.impl_processMouseEvent (Scene.java:1762) à javafx.scene.Scene $ ScenePeerListener.mouseEvent (Scene.java:2494) à com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run (GlassViewEventHandler.java:380) à com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run (GlassViewEventHandler.java:294) à java.security.AccessController.doPrivileged (native Method) à com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda $ 354 $ handleMouseEvent (GlassViewEventHandler.jav a: 416) à com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock (QuantumToolkit.java:389) à com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent (GlassViewEventHandler.java:415) à com.sun.glass.ui.View.handleMouseEvent (View.java:555) à com.sun.glass.ui.View.notifyMouse (View.java:937) à com.sun.glass.ui. win.WinApplication._runLoop (méthode native) à com.sun.glass.ui.win.WinApplication.lambda $ null $ 148 (WinApplication.java:191) à java.lang.Thread.run (Thread.java:745) causés par: java.lang.reflect.InvocationTargetException à sun.reflect.NativeMethodAccessorImpl.invoke0 (native Method) à s un.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) à sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) à java.lang.reflect.Method.invoke (Method.java:498) à sun.reflect.misc.Trampoline.invoke (MethodUtil.java:71) à sun.reflect.GeneratedMethodAccessor1.invoke (Source inconnue) à sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) à java. lang.reflect.Method.invoke (Method.java:498) au sun.reflect.misc.MethodUtil.invoke (MethodUtil.java:275) au javafx.fxml.FXMLLoader $ MethodHandler.invoke (FXMLLoader.java:1769) ... 48 plus causés par: java.lang.NullPointerException à testingcards.FXMLDocumentController.handleButtonAction (FXMLDocumentController.java:46)

J'utilise NetBeans IDE

+1

Au lieu de _replacing_ le 'Label', pourquoi ne pas _update_ le' ImageView' en utilisant 'setImage()'? – trashgod

+1

'public AnchorPane volet;' n'est pas marqué avec l'annotation '@ FXML', il n'est donc pas inséré par le chargeur, il est donc nul, d'où le' NullPointerException'. En outre, le chargement de l'image peut également provoquer. – DVarga

+0

@trashgod j'ai essayé cela comme Aza Suhaza a dit, mais n'a pas fonctionné, quelle sera la raison? – Kaw123

Répondre

2

Vous devez créer ImageView ou si vous utilisez le constructeur de la scène, déposez un ImageView dans la zone AnchorPane . Assigner un identifiant pour le nouveau ImageView;

Dans votre classe de contrôleur;

@FXML 
    ImageView imageId; 

    @FXML 
    private void handleButtonAction(ActionEvent event) throws IOException { 
     Image img = new Image("../img/img.jpg"); 
     imageId.setImage(img); 
    } 
+0

Bonjour, merci pour la réponse, mais je reçois' Exception dans le fil "JavaFX Application Thread" java.lang .RuntimeException: java.lang.reflect.InvocationTargetException' – Kaw123

+0

oh, merci ça a marché, j'ai eu un problème avec le chemin de l'image – Kaw123