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.png
zkusil 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ů
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.