2016-10-25 6 views
1

Ich versuche, das Bild in einer ImageView-Komponente auf Knopfdruck zu ändern. Ich brauche es, um ein lokales Bild zu sein. Ich bekomme immer einen Pfadfehler und kann kein ImageIcon verwenden und in ein Image konvertieren. Gibt es dafür keinen einfachen Weg?Ändern Sie ImageView Bild in Code mit JavaFX Scene Builder

package tictactoesimulator_alliebeckman; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 

/** 
* 
* @author Allie 
*/ 
public class FXMLDocumentController implements Initializable { 

    // my components   
    @FXML 
    public Label lblWinLose; 
    @FXML 
    public Button btnNewGame; 
    @FXML 
    public ImageView ivOne; 

    // Event handle for button click 
    @FXML 
    public void handleButtonAction(ActionEvent event) { 

     // here is where I'm having the issue I have the image file in my src folder 
     // I've tried using a ImageIcon and it wont convert to an Image? 
     // All I need is the image to change to the local image on button click 

     lblWinLose.setText("Clicked"); 
     Image image = new Image("o.png"); 
     ivOne = new ImageView(image); 
    } 

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

    } 
} 

Das Projekt-Layout kann in dieser Eclipse-Screenshot zu sehen:

enter image description here

+2

Bitte senden Sie den Stack Trace –

+0

java.lang.IllegalArgumentException: Ungültige URL: Ungültige URL oder Ressource nicht gefunden –

Antwort

1

Aus dem Screenshot in Frage, das Bild im gleichen Paket wie die FXMLDocumentController Klasse.

Die Image constructor Sie verwenden wird, um die String Version einer URL des Bildes erwartet: Der beste Weg, eine solche URL zu erhalten, ist getClass().getResource(...) (da dies zu verwenden funktioniert, ob Sie aus dem Dateisystem geladen werden oder aus eine JAR-Datei). getClass().getResource(...) wird in Bezug auf die aktuelle Klasse lösen (zu dem Classpath oder relativ, wenn Sie den Ressourcennamen mit einem führenden / beginnen):

Image image = new Image(getClass().getResource("o.png").toExternalForm()); 

und dann stattdessen ein neues ImageView schaffen sollten Sie tun

ivOne.setImage(image); 
+0

Wenn die Datei 'o.png' wirklich im Wurzelverzeichnis des Klassenpfads steht,' new Image ("o.png") sollte funktionieren, da das, was Sie manuell tun, bereits im 'Image' erfolgt Konstruktor thx zu [validateUrl] (http://grepcode.com/file/repo1.maven.org/maven2/net.java.openjfx.backport/openjfx-78-backport/1.8.0-ea-b96.1/javafx /scene/image/Image.java#1059) –

+0

@NicolasFilotto Guter Punkt. Wahrscheinlich werden mehr Informationen darüber benötigt, was tatsächlich passiert. –

+0

Vielen Dank für Ihre Hilfe. Ich habe beide Antworten ausprobiert und es funktioniert immer noch nicht. Ich denke, vielleicht habe ich die Bilder im falschen Ordner? –

Verwandte Themen