JavaFX Bild zeigen bei Hover auf Zeile von TableView


jimb0p

Erfahrenes Mitglied
Hallo Zusammen,

ich möchte gerne Bilder am Mauszeiger anzeigen lassen, wenn ich mit dem Zeiger über die einzelnen Zeilen eines TableViews gehe. Wie genau stelle ich das an, da die Darstellung des Bildes ja immer exakt bei dem Mauszeiger sein soll und nicht an einer statischen Stelle.

Gruß!

Ich habe bereits einen EventHandler in jede Zelle eingebaut, somit weiß ich über welcher Zelle ich mich mit der Maus befinde. Jetzt müsste ich nur noch ein ImageView nähe Mauszeiger öffnen weiß nur nicht ganz wie :)
 
Zuletzt bearbeitet von einem Moderator:

jimb0p

Erfahrenes Mitglied
Gibt es dazu eventuell noch eine Alternative? Denn die Performance vom Tooltip ist nicht so schön, da es immer ein wenig hakt und braucht bis er das Bild anzeigt. Ich habe jeder Zelle einen EventHandler<MouseEvent> zugeordnet der folgendes ausführt wenn man über der Zelle ist:

Java:
public void showTooltipPreview(TableCell<Artikel, String> tmpHanCell){
        final Tooltip tooltip = new Tooltip();
        TableRow<?> tmpRow = tmpHanCell.getTableRow();
        Artikel tmpArtikel = (Artikel) tmpRow.getItem();
        Long kArtikel = tmpArtikel.kArtikelProperty().get();
        byte[] tmp = db.getFirstImageToPk(kArtikel);

        if(tmp != null){
            ImageView tmpImgView = new ImageView(convertToJavaFXImage(tmp, 266, 146));
            tmpImgView.setFitWidth(266);
            tmpImgView.setFitHeight(146);
            //tmpImgView.setSmooth(true);
            //tmpImgView.setCache(true);
            tooltip.setGraphic(tmpImgView);
        }else{
            tooltip.setText("Keine Vorschau");
        }
        tmpHanCell.setTooltip(tooltip);
    }
Hier noch der Code wo das Bild transformiert wird:
Java:
private Image convertToJavaFXImage(byte[] raw, final int width, final int height) {
        WritableImage image = new WritableImage(width, height);
        try {
            ByteArrayInputStream bis = new ByteArrayInputStream(raw);
            BufferedImage read = ImageIO.read(bis);
            image = SwingFXUtils.toFXImage(read, null);
        } catch (IOException e) {
            alert.exceptionAlert("Fehler beim Erstellen der Vorschaubildes", "Konnte Vorschaubild nicht erstellen. Fehler beim transformieren", null, e);
        }
        return image;
    }
Für jede Optimierung wäre ich dankbar!
Gruß!