JavaFX Zeichenprogramm mit JavaFX FXML

udo-100

Mitglied
Hallo,
bin gerade dabei ein kleines Zeichenprogramm mit JavaFX zu erstellen.
Leider konnte ich mit Google kein Beispiel finden wie man nachträglich, also währen der Laufzeit eines Programmes Linien oder Rechtecke auf ein Canvas zeichnen kann.
Die Beispiele die ich finde gehen immer davon aus das die Zeichenobjekte vorher feststehen und als Node eingefügt werden.
Weis jemand ein Tutorial oder Beispiel? (Buch)
Danke..
 

dzim

Top Contributor
Im Prinzip ist dieser Code jederzeit aufrufbar.
Nehmen wir an, du hast dein Canvas in einem FXML deklariert, dann musst du nun eigentliche in der #initialize-Methode den GC (GraphicsContext, oder so, in jetzt nicht der Canvas-Profi) aus dem Canvas holen und speichern, dann kannst du damit jederzeit auf dem Canvas "rumpinseln".
Bedenke nur, dass das Canvas nicht skaliert oder seine Grösse ändert, dazu musst du selbst etwas implementieren (gab es hier im Forum auch schon, die Frage).
Wenn du Probleme hast, aber schon etwas Code, dann poste ihn und wir schauen mal, ob sich was machen lässt, dich in die richtige Richtung zu schubsen :)
 

udo-100

Mitglied
Ok, das mit der Canvas hab ich jetzt hingekriegt. Danke..
Da ich in meinem Programm aber die gezeichneten Figuren mit der Maus bewegen möchte, überlege ich ob die Canvas der richtige Weg ist. Ich denke das die einzelnen Figuren oder Linien besser als Objekte gehandelt werden müssten. Man könnte das ganze doch auch mit Shapes aufbauen. Da sind die Geometrien gleich Objekte.
Nur wie füge ich im Programmablauf noch Objekte zu meiner Stage hinzu?
 

dzim

Top Contributor
Das hängt jetzt von der Menge Shapes ab, die du bewegen möchtest (bedenke, dass du am Ende eventuell SEHR viele Objekte auf dem Scene-Graph haben kannst).
Wenn du also Shapes (Formen, wie etwa Circles) auf einem Pane hin und her bewegen möchtest, schau dir bitte mal dieses Snipped von jewelsea (eich recht prominenter Poster auf StackOverflow bezüglich JavaFX) an:
https://gist.github.com/jewelsea/4569878

Ansonsten: Man kann natürlich auch gezeichnete Elemente auf einem Canvas bewegen. Ein Beispiel wird in einer Antwort (ebenfalls) auf StackOverflow beschrieben (wieder mal von jewelsea...):
http://stackoverflow.com/questions/21396055/moving-shapes-in-javafx-canvas

Generell wird in dem Tutorial von Oracle auf vieles eingegangen (z.B auch, wie man Ebenen simulieren kann)
http://docs.oracle.com/javase/8/javafx/graphics-tutorial/canvas.htm

Generell aber kann man vieles hier auch wie in Swing machen. Auf www.java2s.com gibt es ein Tutorial (oder besser ein Snipped) dazu, wie man eine Form auf einem Canvas mit der Mouse bewegen kann.
Ich denke der Trick ist, ein entsprechendes Objekt mit den Koordinaten-Daten zu halten, um quasi bei Drag&Drop zu testen, ob man innerhalb der Boundaries des gezeichneten Shapes ist und bei jedem "Mouse Move" die entpsrechende Form neu zu zeichen.

Kurzum: Viele Wege führen nach Rom. Wenn du nur wenige Formen anzeigen und bewegen willst, schau dir den ersten Link an. Ansonsten die anderen.
 

udo-100

Mitglied
@dzim ...Danke für die Links.
Mich würde interessieren wie das bei professionellen CAD-Programmen verwaltet wird.
Da kann man jede Linie anklicken und den Endpunkt mit der Maus bewegen.
Das müssten dann doch auch Objekte sein, die im Arbeitsspeicher gehalten werden, oder?
 

dzim

Top Contributor
Ich kenne mich zu wenig mit CAD-Applikationen aus, um da eine wirklich gute Aussage zu machen... Ich vermute aber, viele davon sind 3D und werden dies über direkte oder indirekte (über APIs wie libGDX, ...) Aufrufe an OpenGL (oder andere Frameworks) machen. Das bedeutet, dass sie im Speicher wahrscheinlich auch eher Referenzen auf die Linien/Endpunkte haben.

Ansonsten meine ich mich zu erinnern, dass Eclipse-Plugins wie das für UML, EMF, XML und so weiter über Canvas funktionieren (finde leider so schnell keine Referenz darauf oder Stellen im Code, musst daher erst einmal mit der Behauptung meinerseits leben).

Das Problem mit dem Shape-Ansatz in JavaFX ist: Dieser Ansatz ist Otto-Normal gut zu gebrauche und relativ leicht verständlich - und ich meine mich an Beispiele zu erinnern wo tausende Shapes noch flüssig dargestellt werden konnten. Aber: Es ist Overhead. Du hast recht grosse Shape-Objekte die direkt auf dem Scene-Graph gerendert werden.

Bei der Variante Canvas mit Hilfs-Objekten, die die Form und Position beschreiben, hast du (IMHO) weniger Overhead.

DISCLAIMER: Du merkst schon, dass ich hier recht schwammig formuliere. Ich bin mir auf dem Gebiet nicht wirklich sicher. Vielleicht kann ja noch einer der Swing-Gurus hier ein paar Ideen beisteuern. Und du könntest vielleicht noch ein wenig erläutern, was du eigentlich erreichen möchtest. Einen Editor, bei dem man Formen hin und her schiebt?

Edit: http://stackoverflow.com/questions/29900837/whats-the-best-way-to-create-a-uml-element-in-javafx-8-0
Auch wenn dieser Eintrag bei StackOverflow keine abschliessende Antwort hat, scheint man dort den Weg der Shapes (also Scene-Graph-Objekete) mit SVGPath gewählt zu haben.

Edit2: Load UI ist im Moment die einzige mir bekannte Anwendung, die so einen Editor zur Verfügung stellt. Dieser scheint Canvas zu verwenden. Allerdings ist der Code jetzt nicht ganz trivial, da die Application als OSGi-Anwendung aufgebaut ist. Und während die Webseite noch Spring Dynamic Modules nennt, scheint dies zwischenzeitlich zu Eclipse Virgo geworden zu sein. Mit einem grossen Fragezeichen, ob das Projekt noch fortgeführt wird.
 
Zuletzt bearbeitet:

udo-100

Mitglied
Da ich beruflich mit CAD-Programmen arbeite, würde mich es interessieren wie das die Profis machen.
Für das Programm das ich im Kopf habe, möchte ich definierte Geometrien auf der Canvas einfügen und dann mit der Maus verschieben und drehen können. Mehr wie 50 Objekte werden es nicht werden, möchte aber von der Menge nicht eingeschränkt sein. Da ich das ganze als Übung zum Objektorientierten programmieren mache, möchte ich gerne meine Zeichenobjekte entsprechend verwalten. Der OOP-Ansatz ist mir auch ziemlich klar, ich schwimme nur mit der JavaFX Gui und dem Stage Szenario ein bisschen.
 

dzim

Top Contributor
Na dann solltest du vorerst wohl erst recht bei dem Stage-Szenario bleiben. Also mit Shapes - Circle, Rectange, SVGPath, etc. - arbeiten! :)
Wenn du das schaffst, hast du das Arbeiten mit dem Scene-Graph definitiv verstanden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JavaFX JavaFX Canvas einfaches Zeichenprogramm AWT, Swing, JavaFX & SWT 7
T 2D-Grafik Tutorial für ein einfaches Zeichenprogramm! AWT, Swing, JavaFX & SWT 2
B Swing Noch ein Zeichenprogramm... AWT, Swing, JavaFX & SWT 19
Q Swing Zeichenprogramm, grundlegende Fragen AWT, Swing, JavaFX & SWT 8
J kleines Zeichenprogramm AWT, Swing, JavaFX & SWT 12
K Probleme mit Zeichenprogramm AWT, Swing, JavaFX & SWT 14
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
S JavaFx Album AWT, Swing, JavaFX & SWT 137
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

Ähnliche Java Themen

Neue Themen


Oben