Diskuze: JavaFX a Scene builder - jak vložit a měnit obrázek v prvku
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

					Člen				
			
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Mělo by to být jak popisuješ, jen jsi možná metodu setImage() používal mimo JavaFX application thread. Zkus jí nastavit takto:
Platform.runLater(new Runnable() {
    @Override public void run() {
        imageView.setImage(...);
    }
});Také můžeš použít WritableImage (http://download.java.net/…leImage.html) a dále měnit jen ten obrázek.
Aha, no.. a to můžu vložit normálně do toho controleru? Já to tam totiž měl takhle, aby se ve Scene builderu dala jen ta metoda přiřadit ke komponentě Image Viewu, stejně jako se třeba u labelu měnil podobným způsobem text.
@FXML
private void handleButtonAction(MouseEvent event) {
   Image img = new Image("2.png");
   obrazekImageView.setImage(img);
}Takhle by to mělo fungovat...
Zkus ještě jinak napsat cestu k souboru
/cz/xx/yy/2.pngzkusil jsem napsat název toho souboru se zavináčem na začátku, potom
taky nakopčil jen na disk, aby se dala takto jednoduše napsat cesta ,,Image
img = new Image("C:\2.png");" a stejně nic, sakryš :/  furt jen error asi na 100
řádků
 furt jen error asi na 100
řádků 
Tak tady je můj controller. je to jediná věc, ve které jsem se hrabal, když nepočítám umístění elementu do scene builderu a přiřazení id + metody
package fxtest;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
public class SampleController implements Initializable {
    @FXML
    private ImageView obrazekImageView;
    @FXML
    private void handleButtonAction(MouseEvent event) {
       Image img = new Image("C:\2.png");
        obrazekImageView.setImage(img);
    }
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}Problém je v tom načítání obrázků.
Správně je to třeba takto:
@FXML private ImageView imageView;
private static final String[] images = {
    "01.png", "02.jpg", "03.png", "04.png"
};
@FXML
private void handleButtonAction(ActionEvent event) {
    String name = images[new Random().nextInt(images.length)];
    InputStream resourceAsStream = this.getClass().getResourceAsStream(name);
    imageView.setImage(new Image(resourceAsStream));
}Pokud jsou všechny obrázky ve stejném balíčku jako kontroler.
Celý projekt: https://db.tt/2Y1603it
Zobrazeno 9 zpráv z 9.
 
				