JavaFx Album

Sandro95

Bekanntes Mitglied
Hey Leute ,
meine Freundin und ich arbeiten derzeit an ein Fortoalbum (siehe Bild).
Hier im Fenster soll die Funktion bestehen ein Bild mit bewertung zu speichern( durch den Stern button und durch add button)
Im nächsten Fenster sollen dann die Biltder mit derpassenden Bewertung geladen werden .
wie gehe ich da am besten vor ?
Ich habtte ei nwenig im Netz geschaut und was vom Filechooser gelesen , wäre das eine gute idee und wie realsiiere ich das dan nam besten ?

Bis dato haben wir nur die GUI , Fachkonzept und datenhaltung kommt noch

Für jede Hilfe bin ich euch mega dankabr ! :)
 

Anhänge

  • unknown.png
    unknown.png
    37,8 KB · Aufrufe: 5
Zuletzt bearbeitet:
M

Mart

Gast
1. du kannst es mit drag and drop machen in dem du den drag content bekommst
2. einen filechooser
3. die resource von einem direkten pfad bekommen

der drag handler wäre halt die "schönste" alternative


unabhängig wie du es rein bekommst musst du es in ein Image umwandeln und in eine ImageView packen
jedoch solltest du das image objekt danach nicht verlieren da die imageview ein javafx node ist und nur 1en parent haben kann dh

wenn du das image objekt weg wirfst kannst du nur noch jeweils einmal das bild in der szene anzeigen lassen
so kannst du das image halt immer wieder in image views packen und es so oft "klonen" wie du möchtest


anregung wäre
1. eine sql datenbank dahinter stellen (sqlite ist zu empfehlen da das sehr einfach ist)
2. eine "fabrik" zu bauen die aus dem reingezogenen bild eine vbox macht und eventhandler hinzufügt zb
Java:
public VBox bilderFabrik ( bild , titel )
{
    ImageView img = new ImageView ( bild );
    Label titelLabel = new Label ( titel )
    VBox bilderbox = new VBox( titelLabel , bild )
    bilderbox.addEventHandler (event -> {
        ....
    })
}
 
Zuletzt bearbeitet von einem Moderator:

Sandro95

Bekanntes Mitglied
Ich hab hab schon mit mySQL erfahrung durc mein Studium gesammelt deswegen würde ich wenn dann diese nutzen :)
aber denke mal , dass ich es mit dem FileChosser implementieren werden ( wie @mihe7 gesagt hat )

@mrBrown
 

mihe7

Top Contributor
wie @mihe7 gesagt hat
Hab nur den Link auf das FileChooser-Tutorial gegeben. Das war nicht als Einordnung sondern einfach als Antwort auf Deine Frage gedacht.

Wenn Du ein Fotoalbum bauen willst, wirst Du die "importierten" Dateien natürlich irgendwo ablegen müssen. Das kann man als BLOB in der DB machen oder im Dateisystem und in der DB nur die Metadaten halten. Hat alles seine Vor- und Nachteile.
 

Sandro95

Bekanntes Mitglied
Hab nur den Link auf das FileChooser-Tutorial gegeben. Das war nicht als Einordnung sondern einfach als Antwort auf Deine Frage gedacht.

Wenn Du ein Fotoalbum bauen willst, wirst Du die "importierten" Dateien natürlich irgendwo ablegen müssen. Das kann man als BLOB in der DB machen oder im Dateisystem und in der DB nur die Metadaten halten. Hat alles seine Vor- und Nachteile.
Also benötige ich trotz dessen eine DB ?
Aber die bildet zB , die würde ich doch in einem Ordner auf meinem Notebook speichern ? @mihe7
 

Sandro95

Bekanntes Mitglied
Hab nur den Link auf das FileChooser-Tutorial gegeben. Das war nicht als Einordnung sondern einfach als Antwort auf Deine Frage gedacht.

Wenn Du ein Fotoalbum bauen willst, wirst Du die "importierten" Dateien natürlich irgendwo ablegen müssen. Das kann man als BLOB in der DB machen oder im Dateisystem und in der DB nur die Metadaten halten. Hat alles seine Vor- und Nachteile.
Habe bis jetzt noch nie eine DB in java eingebunden , das plugin für die connection habe ich dennoch @mihe7
 

mihe7

Top Contributor
Nochmal: Du musst keine DB verwenden. Wenn Du aber eine DB verwendest, kannst Du die Dateien direkt in der DB als BLOB ablegen oder in das Dateisystem speichern und Metadaten (z. B. Pfade zur Datei) in der DB ablegen.

Das hängt einfach von Deinen Anforderungen ab. Wenn Du einfach die Bilder aus einem Verzeichnisbaum darstellen möchtest, was willst Du dann in der DB speichern? Wenn Du Bilder z. B. textuell beschreiben möchtest und danach suchen können willst, bietet sich eine DB ggf. an.
 

Sandro95

Bekanntes Mitglied
Nochmal: Du musst keine DB verwenden. Wenn Du aber eine DB verwendest, kannst Du die Dateien direkt in der DB als BLOB ablegen oder in das Dateisystem speichern und Metadaten (z. B. Pfade zur Datei) in der DB ablegen.

Das hängt einfach von Deinen Anforderungen ab. Wenn Du einfach die Bilder aus einem Verzeichnisbaum darstellen möchtest, was willst Du dann in der DB speichern? Wenn Du Bilder z. B. textuell beschreiben möchtest und danach suchen können willst, bietet sich eine DB ggf. an.
Ich möchte halt bilder mit bewertung ( in sternen ) abgeben können und diese auf der nächsten seite dann wieder laden @mihe7
 
K

kneitzel

Gast
Ich möchte halt bilder mit bewertung ( in sternen ) abgeben können und diese auf der nächsten seite dann wieder laden @mihe7
Also musst Du die Daten, die Du dazu benötigst, in irgend einer Form speichern - und dann natürlich auch umgekehrt: wieder laden.

Aber wie Du dies machst, ist doch vollkommen egal. Das kann eine Datenbank sein, aber was ist eine Datenbank: Einfach etwas Software, die die Daten dann auf der Festplatte speichert und wieder von dieser lädt.

Und selbst wenn es eine Datenbank ist - selbst da gibt es teilweise Optionen, Dinge separat als Datei zu speichern, d.h. ein Bild in der Datenbank kann unter dem Strich auch wieder nur eine Datei auf dem Filesystem sein (z.B. MS SQL Filestream).
 

Sandro95

Bekanntes Mitglied
Also musst Du die Daten, die Du dazu benötigst, in irgend einer Form speichern - und dann natürlich auch umgekehrt: wieder laden.

Aber wie Du dies machst, ist doch vollkommen egal. Das kann eine Datenbank sein, aber was ist eine Datenbank: Einfach etwas Software, die die Daten dann auf der Festplatte speichert und wieder von dieser lädt.

Und selbst wenn es eine Datenbank ist - selbst da gibt es teilweise Optionen, Dinge separat als Datei zu speichern, d.h. ein Bild in der Datenbank kann unter dem Strich auch wieder nur eine Datei auf dem Filesystem sein (z.B. MS SQL Filestream).
Könnte man das dann auch einfach per Serialisierung handhaben ? @kneitzel
 
K

kneitzel

Gast
Könnte man das dann auch einfach per Serialisierung handhaben ? @kneitzel
Klar, Dir sind da prinzipiell keine Grenzen gesetzt. Die Frage ist immer, was die genauen Anforderungen sind. Es gibt in Datenbanken viel Funktionalität: Wenn man die (teilweise) braucht, dann macht es Sinn, eine Datenbank zu nutzen. Braucht man dies nicht, dann macht es wenig Sinn.

Fotoalbum kann somit einfach eine Verzeichnisstruktur mit Bildern sein. Zusätzliche Informationen kannst Du irgendwie ablegen.

Aber wenn du aus ganz vielen Verzeichnissen ein bestimmtes Bild suchen möchtest, dann wird es ggf. aufwendiger (Alle Verzeichnisse durchgehen, evtl. viele Dateien mit Zusatzinformationen einlesen ...) Wir kennen die Anforderungen nicht. Daher ist es schwer, da etwas zu sagen.

Aber das sollte auch unkritisch sein. Du solltest die Zugriffe kapseln. Dann kannst Du die Art des Zugriffs jederzeit ändern und ersetzen.

Wichtig ist hier halt: Wir kennen weder die genauen Anforderungen noch deinen Wissenstand. Daher können wir Dir nicht zu irgendwas raten. Wir können nur ganz viele Vor- und Nachteile auflisten, aber selbst das wird schwer, denn es gibt viele Punkte, die evtl. uninteressant sind für Dich und viele dieser Details muss man auch nicht wirklich verstehen.
 

Sandro95

Bekanntes Mitglied
die Bilder füge ich ja ein durch die eingabe des Pfades .
Ich hatte gedacht , dass ich die Bilder dann alle in einem Ordner ablege

Eig gibt es keine Anforderung , da es ein Hobbyprojekt mit meiner Freundin ist
Wir wollen es halt so leicht wie möglich halten , deswegen die Frage was der beste Weg wäre @kneitzel
Klar, Dir sind da prinzipiell keine Grenzen gesetzt. Die Frage ist immer, was die genauen Anforderungen sind. Es gibt in Datenbanken viel Funktionalität: Wenn man die (teilweise) braucht, dann macht es Sinn, eine Datenbank zu nutzen. Braucht man dies nicht, dann macht es wenig Sinn.

Fotoalbum kann somit einfach eine Verzeichnisstruktur mit Bildern sein. Zusätzliche Informationen kannst Du irgendwie ablegen.

Aber wenn du aus ganz vielen Verzeichnissen ein bestimmtes Bild suchen möchtest, dann wird es ggf. aufwendiger (Alle Verzeichnisse durchgehen, evtl. viele Dateien mit Zusatzinformationen einlesen ...) Wir kennen die Anforderungen nicht. Daher ist es schwer, da etwas zu sagen.

Aber das sollte auch unkritisch sein. Du solltest die Zugriffe kapseln. Dann kannst Du die Art des Zugriffs jederzeit ändern und ersetzen.

Wichtig ist hier halt: Wir kennen weder die genauen Anforderungen noch deinen Wissenstand. Daher können wir Dir nicht zu irgendwas raten. Wir können nur ganz viele Vor- und Nachteile auflisten, aber selbst das wird schwer, denn es gibt viele Punkte, die evtl. uninteressant sind für Dich und viele dieser Details muss man auch nicht wirklich verstehen.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Eig gibt es keine Anforderung , da es ein Hobbyprojekt mit meiner Freundin ist
Naja, Du willst irgendein Ergebnis haben. Dieses definiert die Anforderungen an die Software.

die Bilder füge ich ja ein durch die eingabe des Pfades .
Ich hatte gedacht , dass ich die Bilder dann alle in einem Ordner ablege
Siehst Du, da hast Du schon eine Anforderung: die Bilder werden zentral (im Dateisystem) gesammelt. Das Dateisystem habe ich mal ausgeklammert, da es sich um ein Detail handelt, das man nicht unbedingt zur Anforderung zählen muss. Kern der Anforderung ist, dass die Bilddateien an an zentraler Stelle verwaltet werden. Das kann z. B. aus Gründen der Sicherung sinnvoll sein.

Dann hast Du eine weitere Anforderung: die Bilder sollen vom Anwender bewertet werden können.

Und so weiter.

Wir wollen es halt so leicht wie möglich halten , deswegen die Frage was der beste Weg wäre @kneitzel
Auch da würde ich sagen: es gibt keinen besten Weg. Es gibt viele brauchbare Wege und jeder hat Vor- und Nachteile.

Mal ein Beispiel: Du könntest hergehen und unterhalb Deines zentralen Fotoalbum-Ordners jeweils einen Ordner für die Sterne-Bewertung anlegen und die Bilder dem entsprechend im Dateisystem verschieben. Bilder mit einer 1-Sterne-Bewertung kommen in das Unterverzeichnis 1, die mit der 2-Sterne-Bewertung in das Unterverzeichnis 2 usw.

Damit sind alle Informationen vorhanden. Das System eignet sich hervorragend, wenn Du vor allem Zugriff auf alle x-Sterne-Bilder haben willst. Es ist ok, um alle Bilder anzuzeigen, aber es ist ungünstig, wenn Du anhand des Bildnamens die Zahl der Sterne ermitteln willst. Dann musst Du nämlich alles durchsuchen. Es ist auch nicht besonders praktisch, wenn Du Bilder nach Namen sortiert haben willst usw.

Der Punkt aber ist, dass es so funktionieren würde. Manches wird ggf. etwas langsam sein, manches sehr schnell. Einiges wird umständlich sein, anderes sehr einfach.

In Deiner Anwendung hast Du ein Interface, das genau diese Dinge vom Rest der Anwendung entkoppelt. Wenn Du später sagst: das ist mir zu lahmarschig, ich häng einen DB-Server dran, dann musst Du lediglich eine andere Implementierung des Interfaces an die Anwendung hängen.

Zur Sicherheit: das war kein Umsetzungsvorschlag, nur eine Möglichkeit, die - je nachdem, was Du vorhast - relativ einfach zu realisieren ist.
 

Sandro95

Bekanntes Mitglied
Naja, Du willst irgendein Ergebnis haben. Dieses definiert die Anforderungen an die Software.


Siehst Du, da hast Du schon eine Anforderung: die Bilder werden zentral (im Dateisystem) gesammelt. Das Dateisystem habe ich mal ausgeklammert, da es sich um ein Detail handelt, das man nicht unbedingt zur Anforderung zählen muss. Kern der Anforderung ist, dass die Bilddateien an an zentraler Stelle verwaltet werden. Das kann z. B. aus Gründen der Sicherung sinnvoll sein.

Dann hast Du eine weitere Anforderung: die Bilder sollen vom Anwender bewertet werden können.

Und so weiter.


Auch da würde ich sagen: es gibt keinen besten Weg. Es gibt viele brauchbare Wege und jeder hat Vor- und Nachteile.

Mal ein Beispiel: Du könntest hergehen und unterhalb Deines zentralen Fotoalbum-Ordners jeweils einen Ordner für die Sterne-Bewertung anlegen und die Bilder dem entsprechend im Dateisystem verschieben. Bilder mit einer 1-Sterne-Bewertung kommen in das Unterverzeichnis 1, die mit der 2-Sterne-Bewertung in das Unterverzeichnis 2 usw.

Damit sind alle Informationen vorhanden. Das System eignet sich hervorragend, wenn Du vor allem Zugriff auf alle x-Sterne-Bilder haben willst. Es ist ok, um alle Bilder anzuzeigen, aber es ist ungünstig, wenn Du anhand des Bildnamens die Zahl der Sterne ermitteln willst. Dann musst Du nämlich alles durchsuchen. Es ist auch nicht besonders praktisch, wenn Du Bilder nach Namen sortiert haben willst usw.

Der Punkt aber ist, dass es so funktionieren würde. Manches wird ggf. etwas langsam sein, manches sehr schnell. Einiges wird umständlich sein, anderes sehr einfach.

In Deiner Anwendung hast Du ein Interface, das genau diese Dinge vom Rest der Anwendung entkoppelt. Wenn Du später sagst: das ist mir zu lahmarschig, ich häng einen DB-Server dran, dann musst Du lediglich eine andere Implementierung des Interfaces an die Anwendung hängen.

Zur Sicherheit: das war kein Umsetzungsvorschlag, nur eine Möglichkeit, die - je nachdem, was Du vorhast - relativ einfach zu realisieren ist.
Erstmal , vielen dank für.deine ausführliche hilfe bzw Tipps!

Also wenn ich das zB so handhaben möchte, das ich im.ordner wo die Bilder gespeichert werden , weitere Ordner habe mit den Bewertungen
Wie kann ich dann die Bilder den Bewertungen zu ordnen und diese dann laden ?
Also pro Fenster soll ein Bild mit dessen Bewertung geladen werden ( als Fenster bei FX) ohne Sortierung oder Reihenfolge
Also das erste Bild welches ich einfüge soll auch mit der ersten Bewertung zsm im.ersten Fenster geladen werden usw .
@mihe7
 
M

Mart

Gast
Also pro Fenster soll ein Bild mit dessen Bewertung geladen werden ( als Fenster bei FX) ohne Sortierung oder Reihenfolge
Also das erste Bild welches ich einfüge soll auch mit der ersten Bewertung zsm im.ersten Fenster geladen werden usw .
du kannst die namen der bilder und die namen der bewertung als ids programmieren sodass sie einzig artig sind und dann lädst du jeweils die paare

es gibt in java auch die möglichkeit einen ganzen ordner zu laden und dann eine liste von den objekten zu haben das findest du relativ schnell im internet
 

mihe7

Top Contributor
Wie gesagt, das war nicht als Vorschlag zur Umsetzung gedacht. Wenn Du das aber machen wolltest, dann bedeutet das Speichern einer Zuordnung nichts anderes, als das Bild in den betreffenden Ordner zu (ver)schieben.

Du hast einen Ordner, sagen wir mal "Album" und in dem Ordner hast Du Ordner 1, 2, 3, 4 und 5. Gibst Du einem Bild 2 Sterne, landet es also in Album/2, bei drei Sternen in Album/3 usw. Hast Du ein Bild Album/2/Java.jpg und willst dessen Bewertung ändern, verschiebst Du es einfach in den betreffenden Ordner, z. B. nach Album/5/Java.jpg.

Aber nochmal: das war kein Vorschlag zur Umsetzung sondern sollte lediglich zeigen, dass es viele Wege gibt, Informationen zu speichern und jeder Weg Vor- und Nachteile besitzt.
 

Sandro95

Bekanntes Mitglied
Wie gesagt, das war nicht als Vorschlag zur Umsetzung gedacht. Wenn Du das aber machen wolltest, dann bedeutet das Speichern einer Zuordnung nichts anderes, als das Bild in den betreffenden Ordner zu (ver)schieben.

Du hast einen Ordner, sagen wir mal "Album" und in dem Ordner hast Du Ordner 1, 2, 3, 4 und 5. Gibst Du einem Bild 2 Sterne, landet es also in Album/2, bei drei Sternen in Album/3 usw. Hast Du ein Bild Album/2/Java.jpg und willst dessen Bewertung ändern, verschiebst Du es einfach in den betreffenden Ordner, z. B. nach Album/5/Java.jpg.

Aber nochmal: das war kein Vorschlag zur Umsetzung sondern sollte lediglich zeigen, dass es viele Wege gibt, Informationen zu speichern und jeder Weg Vor- und Nachteile besitzt.
Ja als Vorschlag aber warum sollte man diesen auch nicht umsetzen ? :D
Hört sich doch gut an

Also würde ich wenn ich das Bild mit der Bewertung hinzufügen will (add Button) es dann im unterordner zB ordner2 speichern und das dann von dort im späteren Verlauf laden ?
 

mihe7

Top Contributor

Sandro95

Bekanntes Mitglied

mihe7

Top Contributor
Code ist kein Problem.

Erstmal eine Klasse, die das Bild in einem Album beschreibt, hier mache ich mal Pfad und Bewertung:
Java:
import java.nio.file.Path;

// hier mal ein record (ab Java 16) zum Code sparen.
public record ImageDescriptor(Path path, int rating) {}

Dann noch ein Album mit ein paar Methoden, hier als Interface, um verschiedene Implementierungen zu ermöglichen:
Java:
import java.awt.Image;
import java.io.InputStream;
import java.util.List;

public interface ImageAlbum {
    ImageDescriptor add(String filename, InputStream data, int rating);
    ImageDescriptor changeRating(ImageDescriptor image, int newRating);
    void remove(ImageDescriptor image);

    List<ImageDescriptor> findAll();
    List<ImageDescriptor> findByRating(int rating);

    Image load(ImageDescriptor image);
}

Was die Methoden machen, sollte anhand der Namen erkennbar sein. Jetzt noch eine Implementierung fürs Dateisystem:
Java:
import java.awt.Image;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UncheckedIOException;
import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.List;
import java.util.stream.Collectors;

import javax.imageio.ImageIO;

public class FilesystemImageAlbum implements ImageAlbum {
    private final Path root;

    public FilesystemImageAlbum(final Path root) {
        this.root = root;
    }

    @Override
    public ImageDescriptor add(String filename, InputStream data, int rating) {
        try {
            Path destDir = getRatingDir(rating);
            Path image = destDir.resolve(filename);

            try(OutputStream out = Files.newOutputStream(image)) {
                data.transferTo(out);
            }

            return new ImageDescriptor(image, rating);
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public void remove(ImageDescriptor image) {
        try {
            Files.delete(image.path());
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public ImageDescriptor changeRating(ImageDescriptor image, int newRating) {
        try {
            Path oldPath = image.path();
            Path newPath = getRatingDir(newRating).resolve(oldPath.getFileName());
            Files.move(oldPath, newPath);
            return new ImageDescriptor(newPath, newRating);
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public List<ImageDescriptor> findAll() {
        return findAll(root);
    }

    @Override
    public List<ImageDescriptor> findByRating(int rating) {
        try {
            return findAll(getRatingDir(rating));
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public Image load(ImageDescriptor image) {
        System.out.println("Loading: " + image.path().toString());
        try(InputStream is = Files.newInputStream(image.path())) {
            return ImageIO.read(is);
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    private List<ImageDescriptor> findAll(Path start) {
        try {
            return Files.walk(start)
                .filter(path -> Files.isRegularFile(path))
                .map(this::toImageDescriptor)
                .collect(Collectors.toList());
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    private ImageDescriptor toImageDescriptor(Path image) {
        Path relative = root.relativize(image);
        int rating = Integer.parseInt(relative.getName(0).toString());
        return new ImageDescriptor(image, rating);
    }

    private Path getRatingDir(int rating) throws IOException {
        Path dir = root.resolve(Integer.toString(rating));
        if (!Files.exists(dir)) {
            Files.createDirectories(dir);
        }
        return dir;
    }
}

Der Code ist an der ein oder anderen Stelle überarbeitungsbedürftig, aber als Skizze reichts. Das wars auch schon.

Das kann man dann auch noch mit einem hingerotzten Code ausprobieren:
Java:
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpClient.Redirect;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.file.Path;
import java.nio.file.Paths;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

/**
 * Test
 */
public class Test {

    private final ImageAlbum album;

    public Test(final ImageAlbum album) {
        this.album = album;
    }

    public void run() throws Exception {
        String filename = "Foto1.jpg";
        HttpClient client = HttpClient.newBuilder()
                .followRedirects(Redirect.NORMAL)
                .build();
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://picsum.photos/200/300"))
                .GET()
                .build();
        InputStream data = client.send(request, BodyHandlers.ofInputStream())
                .body();

        int rating = (int)(Math.random() * 5) + 1;

        System.out.printf("Füge %s mit Rating %d zum Album hinzu\n", filename, rating);
        ImageDescriptor added = album.add(filename, data, rating);
        showAllImages();

        System.out.printf("Ändere Rating von %s zu 3\n", filename, rating);
        ImageDescriptor changed = album.changeRating(added, 3);
        showAllImages();

        System.out.println("Bilder mit Rating 3");
        album.findByRating(3).stream()
                .map(Test::description)
                .forEach(System.out::println);

        ImageIcon icon = new ImageIcon(album.load(changed));
        JOptionPane.showMessageDialog(null, new JLabel(icon));

        System.out.printf("Entferne %s aus Album\n", filename);
        album.remove(changed);
        showAllImages();
    }

    private static String description(ImageDescriptor descriptor) {
        return String.format("%s: %d", descriptor.path().toString(), descriptor.rating());
    }

    private void showAllImages() {
        System.out.println("Vorhandene Bilder:");
        album.findAll().stream()
                .map(desc -> String.format("%s: %d", desc.path(), desc.rating()))
                .forEach(System.out::println);
    }

    public static void main(String[] args) throws Exception {
        Path albumRoot = Paths.get(args[0]);
        ImageAlbum album = new FilesystemImageAlbum(albumRoot);
        Test test = new Test(album);
        test.run();
    }

}
 

Sandro95

Bekanntes Mitglied
Code ist kein Problem.

Erstmal eine Klasse, die das Bild in einem Album beschreibt, hier mache ich mal Pfad und Bewertung:
Java:
import java.nio.file.Path;

// hier mal ein record (ab Java 16) zum Code sparen.
public record ImageDescriptor(Path path, int rating) {}

Dann noch ein Album mit ein paar Methoden, hier als Interface, um verschiedene Implementierungen zu ermöglichen:
Java:
import java.awt.Image;
import java.io.InputStream;
import java.util.List;

public interface ImageAlbum {
    ImageDescriptor add(String filename, InputStream data, int rating);
    ImageDescriptor changeRating(ImageDescriptor image, int newRating);
    void remove(ImageDescriptor image);

    List<ImageDescriptor> findAll();
    List<ImageDescriptor> findByRating(int rating);

    Image load(ImageDescriptor image);
}

Was die Methoden machen, sollte anhand der Namen erkennbar sein. Jetzt noch eine Implementierung fürs Dateisystem:
Java:
import java.awt.Image;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UncheckedIOException;
import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.List;
import java.util.stream.Collectors;

import javax.imageio.ImageIO;

public class FilesystemImageAlbum implements ImageAlbum {
    private final Path root;

    public FilesystemImageAlbum(final Path root) {
        this.root = root;
    }

    @Override
    public ImageDescriptor add(String filename, InputStream data, int rating) {
        try {
            Path destDir = getRatingDir(rating);
            Path image = destDir.resolve(filename);

            try(OutputStream out = Files.newOutputStream(image)) {
                data.transferTo(out);
            }

            return new ImageDescriptor(image, rating);
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public void remove(ImageDescriptor image) {
        try {
            Files.delete(image.path());
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public ImageDescriptor changeRating(ImageDescriptor image, int newRating) {
        try {
            Path oldPath = image.path();
            Path newPath = getRatingDir(newRating).resolve(oldPath.getFileName());
            Files.move(oldPath, newPath);
            return new ImageDescriptor(newPath, newRating);
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public List<ImageDescriptor> findAll() {
        return findAll(root);
    }

    @Override
    public List<ImageDescriptor> findByRating(int rating) {
        try {
            return findAll(getRatingDir(rating));
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    @Override
    public Image load(ImageDescriptor image) {
        System.out.println("Loading: " + image.path().toString());
        try(InputStream is = Files.newInputStream(image.path())) {
            return ImageIO.read(is);
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    private List<ImageDescriptor> findAll(Path start) {
        try {
            return Files.walk(start)
                .filter(path -> Files.isRegularFile(path))
                .map(this::toImageDescriptor)
                .collect(Collectors.toList());
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    private ImageDescriptor toImageDescriptor(Path image) {
        Path relative = root.relativize(image);
        int rating = Integer.parseInt(relative.getName(0).toString());
        return new ImageDescriptor(image, rating);
    }

    private Path getRatingDir(int rating) throws IOException {
        Path dir = root.resolve(Integer.toString(rating));
        if (!Files.exists(dir)) {
            Files.createDirectories(dir);
        }
        return dir;
    }
}

Der Code ist an der ein oder anderen Stelle überarbeitungsbedürftig, aber als Skizze reichts. Das wars auch schon.

Das kann man dann auch noch mit einem hingerotzten Code ausprobieren:
Java:
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpClient.Redirect;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.file.Path;
import java.nio.file.Paths;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

/**
 * Test
 */
public class Test {

    private final ImageAlbum album;

    public Test(final ImageAlbum album) {
        this.album = album;
    }

    public void run() throws Exception {
        String filename = "Foto1.jpg";
        HttpClient client = HttpClient.newBuilder()
                .followRedirects(Redirect.NORMAL)
                .build();
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://picsum.photos/200/300"))
                .GET()
                .build();
        InputStream data = client.send(request, BodyHandlers.ofInputStream())
                .body();

        int rating = (int)(Math.random() * 5) + 1;

        System.out.printf("Füge %s mit Rating %d zum Album hinzu\n", filename, rating);
        ImageDescriptor added = album.add(filename, data, rating);
        showAllImages();

        System.out.printf("Ändere Rating von %s zu 3\n", filename, rating);
        ImageDescriptor changed = album.changeRating(added, 3);
        showAllImages();

        System.out.println("Bilder mit Rating 3");
        album.findByRating(3).stream()
                .map(Test::description)
                .forEach(System.out::println);

        ImageIcon icon = new ImageIcon(album.load(changed));
        JOptionPane.showMessageDialog(null, new JLabel(icon));

        System.out.printf("Entferne %s aus Album\n", filename);
        album.remove(changed);
        showAllImages();
    }

    private static String description(ImageDescriptor descriptor) {
        return String.format("%s: %d", descriptor.path().toString(), descriptor.rating());
    }

    private void showAllImages() {
        System.out.println("Vorhandene Bilder:");
        album.findAll().stream()
                .map(desc -> String.format("%s: %d", desc.path(), desc.rating()))
                .forEach(System.out::println);
    }

    public static void main(String[] args) throws Exception {
        Path albumRoot = Paths.get(args[0]);
        ImageAlbum album = new FilesystemImageAlbum(albumRoot);
        Test test = new Test(album);
        test.run();
    }

}
Mit client und request habe ich noch nie gearbeitet, ist das besonders schwer ?
 

Sandro95

Bekanntes Mitglied
Code ist kein Problem.

Erstmal eine Klasse, die das Bild in einem Album beschreibt, hier mache ich mal Pfad und Bewertung:
Java:
import java.nio.file.Path;

// hier mal ein record (ab Java 16) zum Code sparen.
public record ImageDescriptor(Path path, int rating) {}
Wenn ich eine ältere Java version habe , wie kann ich das mit de mrecord umsetzen ? (sagen wir mal ich möchte bei der Version auch bleiben ) @mihe7
 
K

kneitzel

Gast

Sandro95

Bekanntes Mitglied
Nein, die gibts erst ab 16. Du kannst aber stattdessen auch einfach eine ganz normale Klasse nutzen.

Welchen Grund hast du denn, bei einer älteren Version zu bleiben?
Ich benutze die sdk 8.1 da dort es sehr einfach ist ein Fx programm zu erstellen. bei den neueren Versionen ist das jkomplexer und das gefällt mir nicht so @mrBrown

danke für die Antworten , dann schaue ich mal mit den Link an @kneitzel
 

mrBrown

Super-Moderator
Mitarbeiter
Du meinst 1.8?

Ich benutze die sdk 8.1 da dort es sehr einfach ist ein Fx programm zu erstellen. bei den neueren Versionen ist das jkomplexer und das gefällt mir nicht so @mrBrown
"Einfacher" ist dabei ein ziemlicher Trugschluss. Das ist ungefähr so wie den Führerschein auf'm gesperrten Nürburgring zu machen – ist erstmal einfach, weil es weder andere Verkehrsteilnehmer noch ne Straßenverkehrsordnung gibt, dafür bringt es dir dann nichts, wenn du irgendwas sinnvolles mit nem Auto machen willst...

Wenn du mit Java 8 entwickelst, läuft es bei dir auf deinem Rechner, wenn du es dann aber weitergeben willst, muss der andere genau die gleiche Version installiert haben – das wäre mit Java 17 nicht anders, nur dass es halt statt "Oracle JDK 1.8_42" sowas wie "Liberica JDK 17 Full" ist. Wenn du dagegen mit Java 17 vernünftig entwickelst, ist es quasi völlig egal, welche Version der andere nutzt, das bräuchte nur "Java 17", egal welche Distribution und welcher Build...
 
K

kneitzel

Gast
Du kannst auch mit höheren Versionen problemlos JavaFX Anwendungen erstellen. Worum es Dir geht, scheint einfach zu sein, dass im JDK schon das JavaFX enthalten ist.

Aber @mrBrown ist da ja jetzt schneller gewesen - Liberica JDK gibt es übrigens unter https://bell-sw.com/
 

mihe7

Top Contributor
Ja, schreib halt einfach eine Klasse mit den beiden Feldern, einem passenden Konstruktor und zwei Gettern, dann sollte das für das Beispiel passen. Übrigens: den HttpClient gibts auch erst ab Java 11 :) Stattdessen solltest Du einfach InputStream data = new URL("https://picsum.photos/200/300").openStream(); verwenden können.
 

Sandro95

Bekanntes Mitglied
Ja, schreib halt einfach eine Klasse mit den beiden Feldern, einem passenden Konstruktor und zwei Gettern, dann sollte das für das Beispiel passen. Übrigens: den HttpClient gibts auch erst ab Java 11 :) Stattdessen solltest Du einfach InputStream data = new URL("https://picsum.photos/200/300").openStream(); verwenden können.
So , ich bins nochmal .. :D

Ich würde dann jetzt eine Klasse implementieren "Album" . Meine Bilder befinden sich direkt auf dem Laptop(welche ich durch den Pfad adden kann ) deswegen benötig ich ja kein URL , richtig ? Ein InputStream würde ja ausreichen oder ?

Im Konstruktor übergebe ich dann den InputStream , mache dafür setter und getter und das wars .

Benötige ich dann noch ne Unterklasse für die Unterordner oder habe ich gerade einen falschen Gedanken ?

danke im voraus :) ! @mihe7
 

mihe7

Top Contributor

Sandro95

Bekanntes Mitglied
Klar. Im Prinzip kannst Du das FileSystemImageAlbum von oben nehmen und ihr noch eine Methode für Dateien (statt InputStream) spendieren, die dann eben die betreffende Datei einfach ins Album kopiert.
Ich komme leider nicht weiter , ich wollte jetzt den Pfad (welchen ich durch das Textfield bildpfad kriege ) in meinem Ordner reinkopieren doch leider klappt das nicht . Was mache ich genau falsch @mihe7 ?

Ich habe es mal mit target statt bildpfad.getText in der Copy Methode probiert geht aber auch nicht

Java:
 b3.setOnAction((ActionEvent event) ->{
                   Path target = Paths.get(bildpfad.getText());
                

                   long bytesCopy = Files.copy(bildpfad.getText(),"C:\\Users\\waf-l\\Desktop\\A&L Projekt");

               });
 

Sandro95

Bekanntes Mitglied
Das ist meien Fehlermeldung :




java: no suitable method found for copy(java.lang.String,java.lang.String)
method java.nio.file.Files.copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...) is not applicable
(argument mismatch; java.lang.String cannot be converted to java.nio.file.Path)
method java.nio.file.Files.copy(java.io.InputStream,java.io_OutputStream) is not applicable
(argument mismatch; java.lang.String cannot be converted to java.io.InputStream)
method java.nio.file.Files.copy(java.io.InputStream,java.nio.file.Path,java.nio.file.CopyOption...) is not applicable
(argument mismatch; java.lang.String cannot be converted to java.io.InputStream)
method java.nio.file.Files.copy(java.nio.file.Path,java.io_OutputStream) is not applicable
(argument mismatch; java.lang.String cannot be converted to java.nio.file.Path)
 
K

kneitzel

Gast
Hast Du Dir die Dokumentatiob von Files einmal angesehen?

Wenn du eine Klasse / Methode nicht kennst, dann bringt es nichts, blind irgendwas zu probieren. Wenn die Hilfen der IDE nicht ausreichen, dann schau in die Dokumentation!

Und die Fehlermeldung sagt es doch auch schon: es gibt keine copy Methode, die Strings als Parameter nimmt.

Die Dokumentation findest du unter:
 

Sandro95

Bekanntes Mitglied
Hast Du Dir die Dokumentatiob von Files einmal angesehen?

Wenn du eine Klasse / Methode nicht kennst, dann bringt es nichts, blind irgendwas zu probieren. Wenn die Hilfen der IDE nicht ausreichen, dann schau in die Dokumentation!

Und die Fehlermeldung sagt es doch auch schon: es gibt keine copy Methode, die Strings als Parameter nimmt.

Die Dokumentation findest du unter:
Also müsste ich erst einen InputStream erstellen zB mit dem textfield.getText und diesen dann im zweiten Parameter target reinschreiben ? @kneitzel
 
K

kneitzel

Gast
Es gibt mehrere copy Methoden. Die mit den Path Parametern sieht doch erst einmal gut aus.

Eine Path Instanz hast du ja schon erzeugen können. Damit hast du es doch schon fast.
Evtl noch nach CopyOptions schauen ...

Aber lies die Dokumentation:
Copy a file to a target file.
Also kein Verzeichnis sondern eine Datei als Ziel angeben!
 

Sandro95

Bekanntes Mitglied
okay , verstehe
aber wie mache ich das wenn ich zB aus einem Ordner ein Bild kopieren möchte und in einen anderen hinzufügen ?
Ich gebe durch bildpfad (textfield) den Pfad des gewünschten Bildes an und mit add Button soll dieses Bild halt in einem anderen Ordner hinzugefügt werden @kneitzel
 

Sandro95

Bekanntes Mitglied
also hab das jetzt so gemacht

Java:
 b3.setOnAction((ActionEvent event) ->{


                    Path source = Paths.get(bildpfad.getText());
                    Path target = Paths.get("C:\\Users\\waf-l\\Desktop\\A&L Projekt");

                   try {
                       Files.copy(source,target);
                   } catch (IOException ex) {
                       ex.printStackTrace();
                   }


               });


Ps: Jetzt habe ich im target noch eine bestimmte Datei(Bild) ausgewählt und jetzt erstellt er mir dort im Ordner ein neuen Ordner welcher aber leer ist. Das gewünschte Bild ist nicht drin
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
MiMa JUnit5 im JavaFX Projekt AWT, Swing, JavaFX & SWT 2
Juelin in javafx Event auslösen AWT, Swing, JavaFX & SWT 4
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
MiMa SwingFXUtils in JavaFX 20 AWT, Swing, JavaFX & SWT 6
MiMa JavaFX Fenstertitel zu klein. AWT, Swing, JavaFX & SWT 1
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
Hatsi09 Javafx MediaPlayer spielt nicht immer AWT, Swing, JavaFX & SWT 3
Hatsi09 Javafx Neuladen von ImageView und MediaView AWT, Swing, JavaFX & SWT 3
Maxim6394 JavaFX Umlaute in JavaFX GUI AWT, Swing, JavaFX & SWT 12
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
JavaSchmecktLecker JavaFX JavaFX Ordner automatisch verlinken AWT, Swing, JavaFX & SWT 2
melaniemueller Taschenrechner JavaFX AWT, Swing, JavaFX & SWT 4
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
thor_norsk JavaFX Anwendung stürzt ab AWT, Swing, JavaFX & SWT 4
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
B Java Projekt mit JavaFX und jfoenix ausführbar machen AWT, Swing, JavaFX & SWT 46
H JavaFX wie JavaFX Projekt aufsetzen? AWT, Swing, JavaFX & SWT 10
thor_norsk JavaFX - Grafikkarte AWT, Swing, JavaFX & SWT 7
MiHimbert Rückmeldung an den aufrufenden JAVAFX-Dialog AWT, Swing, JavaFX & SWT 1
MiMa JavaFX Runtime components are Missing??? AWT, Swing, JavaFX & SWT 3
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
B JavaFX Sprachumschaltung mit Button auf der HMI AWT, Swing, JavaFX & SWT 6
H JavaFX Fehlende JavaFX Package AWT, Swing, JavaFX & SWT 10
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
G JavaFX Line Chart mit Farbverlauf/Gradient in Linie AWT, Swing, JavaFX & SWT 1
thor_norsk JavaFX, FXML und SceneBuilder AWT, Swing, JavaFX & SWT 6
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
temi JavaFX "Frames" in JavaFx - passende Komponente? AWT, Swing, JavaFX & SWT 13
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
_user_q [JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf? AWT, Swing, JavaFX & SWT 6
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
J JavaFX Schiffe versenken mit JavaFX und Scene builder AWT, Swing, JavaFX & SWT 3
Encera ArrayList mit eigenen Objekten in JavaFX sortieren und ausgeben AWT, Swing, JavaFX & SWT 50
L JavaFx Textformatierung mittels Datenbank und Funktion anpassen AWT, Swing, JavaFX & SWT 5
sserio Wie funktioniert ein Controller bei JavaFx? AWT, Swing, JavaFX & SWT 1
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
S Ich bringe Code mit JavaFX unter Apache NetBeans IDE 12.6 nicht zum laufen. AWT, Swing, JavaFX & SWT 14
K Bekomme (u.a) javafx.fxml.LoadException trotz "korrektem" Code AWT, Swing, JavaFX & SWT 8
S JavaFX: voneinander abhängige TextFields AWT, Swing, JavaFX & SWT 33
M Gluon will JavaFX in den Browser stecken AWT, Swing, JavaFX & SWT 0
H javafx application does not exist AWT, Swing, JavaFX & SWT 16
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
M Javafx versuch Bibliothek zu erstellen AWT, Swing, JavaFX & SWT 0
N JavaFX Javafx intelij Projekt zu ausführbaren jar Datei Machen AWT, Swing, JavaFX & SWT 1
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
izoards JavaFX TextFlow - Sonderzeichen AWT, Swing, JavaFX & SWT 1
maximstein JavaFX WebView - java.lang.NoSuchMethodError: 'boolean com.sun.prism.ResourceFactory.isDisposed()' AWT, Swing, JavaFX & SWT 4
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
MiHimbert javaFX openfx (17) datepicker AWT, Swing, JavaFX & SWT 3
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
D Verschieden Scenen ansprechen mit dem Scene Builder und JavaFX (Eclipse) AWT, Swing, JavaFX & SWT 16
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
M Zufallsgenerator bei JavaFx AWT, Swing, JavaFX & SWT 1
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
L JavaFX JavaFX, MVVM und SceneBuilder AWT, Swing, JavaFX & SWT 4
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
J JavaFX - Included FXML - Entfernen feststellen AWT, Swing, JavaFX & SWT 2
J JavaFX JavaFX/ Taskmenu / UML Klassendiagramm AWT, Swing, JavaFX & SWT 2
Davee JavaFX JavaFX Jar ausführbar jedoch nicht alle Stages AWT, Swing, JavaFX & SWT 3
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
C MouseEvent JavaFX AWT, Swing, JavaFX & SWT 4
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
M4cM4rco0707 JavaFX Custom-Komponente mit Custom-Controller AWT, Swing, JavaFX & SWT 3
M Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found AWT, Swing, JavaFX & SWT 14
G javafx build.fxbuild in eclipse und ANT AWT, Swing, JavaFX & SWT 9
M Kollisionensbehandlung mit JavaFX AWT, Swing, JavaFX & SWT 1
N JavaFX - Toolkit not initialized AWT, Swing, JavaFX & SWT 6
G JavaFX , Duplicate erzeugt aber ich weis nicht wo AWT, Swing, JavaFX & SWT 4
K Javafx Plugin (javafx:jlink) mit moditect Plugin nutzen ... AWT, Swing, JavaFX & SWT 5
J Saubere Trennung Model, View, Controller Javafx AWT, Swing, JavaFX & SWT 10
G JavaFX BarChart während der Runtime aktualisieren AWT, Swing, JavaFX & SWT 4
Z JavaFX JavaFX Spinner AWT, Swing, JavaFX & SWT 1
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
T JavaFX DatePicker JavaFX AWT, Swing, JavaFX & SWT 14
G ObjectOutPutStream mit Javafx GUI Elementen AWT, Swing, JavaFX & SWT 14
G Bilder in javafx Project AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben