Gantt Diagramm mit Swing - Designfragen

Status
Nicht offen für weitere Antworten.

meister-g

Bekanntes Mitglied
Hallo Java-Gemeinde,

ich plane ausgehend von einem existierendem Projektbaum ein Gantt-Diagramm zu erstellen.
In den Baumobjekten sind alle Daten dazu gespeichert.
Ziel ist es eben nun rechts auf einer Zeitachse die entsprechenden Daten mit Balken zu visualisieren (+ später evtl. manipulieren zu können).

Kann mir hier jemand Designtipps geben?
Gäbe es z.B. die Möglichkeit den Baum links zu "kopieren" (wg Listener usw aber eben irgendwie doch das gleiche Objekt) und den Renderer gewaltig umzuschreiben?

Oder wäre eben ein extremer Renderer, der eben das koplette Gantt-Diagramm (Baum und Balken rechts daneben) zeichnet eine Möglichkeit?

Oder kann man eine JTable so gestalten, dass sie sich von den Zellenabmessungen genau an den Baum hält und je nach Baumzustand Zeilen ausblendet? Wenn ja wie?

Wenn nicht über einen Tree oder Renderer gelöst, was könnte sonst noch eine elegante Lösung sein? Einen Balken in einer Zeitachse zu zeichnen sollte ja nicht das Problem sein - aber eben dass er genau auf der höhe des zugehörigen Blattes im Baum links erscheint - und das eben nur alle geöffneten Äste/Blätter rechts erscheinen...

Wäre toll von Eurer Erfahrung mit Ähnlichem oder einfach nur Kreatives zu hören.



Rainer
 

AlArenal

Top Contributor
Stichwort: MVC

Überleg dir in Ruhe welche Daten ein Gantt-Diagramm benötigt und leite daraus ein allgemeingültiges GanttModel ab. Schreib dir einen Dummy-GanttView, basierend z.B. auf JComponent und verbinde Model und View mit einem GanttModelChangedListener, der GanttModelChangedEvents transportiert, welche benötigte Informatioen enthält. Wenn du verstehst wie die entsprechenden Pendants für JTRee oder JTable aufgebaut sind und funktionieren, ist das im Grunde nur noch eine Fleißarbeit.

Dann überlegst du dir in Ruhe wie du den View Daten anzeigen lässt. Analog zu den oben genannten Komponenten kannst du auch dafür sorgen, dass du den View mit Renderern ausstatten kannst.

Verzettel dich nicht zu früh indem du zuviel gleichzeitig machen willst. Mache einen logischen Schritt nach dem anderen und erweitere sukzessive. Nur so kannst du auch vernünftig testen.

Um das Ganze evtl. später einmal interaktiv zu gestalten, würdest du z.B. den View auf Maus und Tatstur mit einem GanttViewChangedEvent reagieren lassen. Einen Listener würdest du dann entsprechende Manipulationen im Model tätigen lassen, um einen Eintrag zu verschieben, oder zurückzuweisen (Controller).
 

meister-g

Bekanntes Mitglied
Vielen Dank für die ersten Gedanken,

Aber hier stehe ich irgendwie total auf der Leitung.

Klar will ich mit den Basics einsteigen... ein GanttView basierend auf JComponent (dh einfach eine Balkenanzeige) ist ja kein Problem.
Wozu hier aber die Listener? Für den Fall dass sich der Prozess verändert? Das ist erst einmal vernachlässigbar denke ich. Oder meinst Du das anders?
Mein Problem wäre - auf welcher höhe zeichne ich diese JComponent? Wie funktioniert die Verbindung zu dem entsrpehenden Objekt im linken Baum?

Ich kapiere in dem Fall schon leider das MVC nicht ganz. Denn der Tree links ist ja schon Model und View in einem, richtig?!

Ich habe schon einige Erfahrung in der Java Entwickllunf und selbst schon öfters MVC implementiert... aber hier hakt es irgendwie. Hängt auch damit zusammen dass ich ausgerechnet mit JTables und JTrees nicht ganz firm bin.
 

AlArenal

Top Contributor
Eins nach dem anderen :D

meister-g hat gesagt.:
Klar will ich mit den Basics einsteigen... ein GanttView basierend auf JComponent (dh einfach eine Balkenanzeige) ist ja kein Problem.

Gut.

Wozu hier aber die Listener? Für den Fall dass sich der Prozess verändert? Das ist erst einmal vernachlässigbar denke ich. Oder meinst Du das anders?

Erstmal vielleicht. Über kurz oder lang kommst du aber nicht daran vorbei. Du willst schließlich nicht bei jeder beliebigen Änderung das Model komplett neu aufbauen?

Mein Problem wäre - auf welcher höhe zeichne ich diese JComponent?

Was für ne "Höhe"???

Wie funktioniert die Verbindung zu dem entsrpehenden Objekt im linken Baum?

Auf der Datenebene über das GanttModel, welches auf dieselben Daten zugreift wie der Tree, oder vielleicht direkt aufs TreeModel. Auf Event-Ebene z.B. über einen TreeSelectionListener.

Ich kapiere in dem Fall schon leider das MVC nicht ganz. Denn der Tree links ist ja schon Model und View in einem, richtig?!

Nein, falsch. Ein JTree ist ein View für eine Instanz einer beliebigen Klasse, welche das TreeModel-Interface implementiert und als Model fungiert => JTree#setModel(TreeModel)

Ich habe schon einige Erfahrung in der Java Entwickllunf und selbst schon öfters MVC implementiert... aber hier hakt es irgendwie. Hängt auch damit zusammen dass ich ausgerechnet mit JTables und JTrees nicht ganz firm bin.

Na wenn du weißt wo noch was fehlt, weißt du ja auch wo du ansetzen musst. :)
 

meister-g

Bekanntes Mitglied
OK, danke für die Antworten. Teils haben sie mir geholfen Teils haben wir aneinander vorbeigeredet (was wohl daran liegt dass ich mich schlecht ausgedrückt habe.

Es wird ein GanttModell benötigt.
Du meinst ich möge ein solches schreiben. Aber das vorhandene Treemodel mit den entsprechenden Node-Objekten die die Prozessdaten enthalten stellt doch im Prinzip schon ein GanttModell dar?! Warum nicht dieses vewenden!?

Wenn GanttModell: Links der View soll ja ein JTree sein - soll das Ganttmodell ein TreeModel sein?! Oder kann/muss man ein "Zwischenmodell" für den JTree erstellen?!

Was ich in jeden Fall nicht verstehe (und das war im vorigen Post mit der "Höhe" gemeint): Was ist die Höhe einer Prozesskomponente. Um links den Baum und rechts xxx (siehe unten) zu synchroniseren müsste ich ja entweder eine Höhe im Modell (oder woanders) speichern (wie bekomme ich JTree dazu genau diese zu verwenden? - ist das nicht unheimliches Renderer-Gefrickel?) oder eben diese Höhe einer Node im Tree (mit allem - ich sage mal "Astgezeichne") ermitteln und dann auf den rechten View anwenden.

View Rechts: Hier eignen sich ja generell JTable oder eben ein eigenes Layout mit JComponents. Wenn JTable benötige ich ja wieder ein Tablemodell. Kann man ein Treemodell mit einem Tablemodell "vereinigen"? Oder eben wenn allgemeingültiges Ganttmodell hier auch ein "Zwischenmodell"?

Stichwort Listener:
Ich benötige ja dann Quasi 2 Listener: Einen SelectionListener im JTree links der rechts im View Neuladen oder Zeilen einfügen/entfernen verursacht. Und einen evtl. dafür falls sich ein Prozess geändert hat, worauf beide Views (oder nur der rechte) dann reagieren). Soweit richtig?
Was ich nicht verstehe ist Deine Aussage, dass ich einen Listener benötige um das Ganttmodell nicht jedesmal neu aufbauen zu müssen.
(+ evtl einen der nach Manipulation rechts Aktualisierungen links im JTree vornimmt)

Benötigt man - wenn die zwei Views direkt auf dem gleichen Modell arbeiten überhaupt solche Listener? (bis auf den SelectionListener natürlich)


Ein wirrer Gedanke zum Schluss: Sollen überhaupt beide Views auf einem Modell arbeiten? Im Prinzip ist doch der linke View das Modell für den rechten View. Denn nur expandierte (sichtbare) Nodes werden ja rechts dargestellt.

Du siehst ich bin immer nich etwas verwirrt in Bezug auf das MVC hier... Danke für die bisherige Hilfe und hoffentlich für zukünftige.
 

AlArenal

Top Contributor
meister-g hat gesagt.:
Es wird ein GanttModell benötigt.
Du meinst ich möge ein solches schreiben. Aber das vorhandene Treemodel mit den entsprechenden Node-Objekten die die Prozessdaten enthalten stellt doch im Prinzip schon ein GanttModell dar?! Warum nicht dieses vewenden!?

Wenn du meinst, dass das passt, kannst du ein "interface GanttModel extends TreeModel" machen. Selbst wenn du fürs GanttModel erstmal keine weiteren Methoiden meinst zu brauchen ist das sauberer und du kannst später einfacher erweitern, als wenn du überall ein TreeModel in deinem Code verwendest.

Wenn GanttModell: Links der View soll ja ein JTree sein - soll das Ganttmodell ein TreeModel sein?! Oder kann/muss man ein "Zwischenmodell" für den JTree erstellen?!

Kommt drauf an ;)
Wie gesagt würde ich ein eigenes Model erstellen. Mir erschließt sich auf Anhieb nicht dass ein Gantt durch einen Baum darstellbar wäre, aber mit Gantt habe ich auch wenig am Hut, ich kenne ihm vom sehen und das isses auch.

Ich habe auch schon TreeModels geschrieben, die nichts anderes machten als sich als Listener (gewissermaßen als View) an einem anderen TreeModel anzumelden und Events umzubiegen, um eine Filterfunktion zu bilden. Wenn du etwas AHnugn von SQL hast, dann stell dir das Model nicht als Tabelle in der Datenbank vor, sondern als View. Ein Model ist nicht die Kiste in die ich meine Daten packe, sondern nur eine Art und Weise auf meine Daten zu schauen und auf si zuzugreifen. Ob ein solches Model nun direkt auf eine Datei, eine Datenbank oder Instanzen zugreift, oder ob es sich die Daten aus anderen Models holt, ist aus Sicht des View im MVC absolut unerheblich.

Was ich in jeden Fall nicht verstehe (und das war im vorigen Post mit der "Höhe" gemeint): Was ist die Höhe einer Prozesskomponente. Um links den Baum und rechts xxx (siehe unten) zu synchroniseren müsste ich ja entweder eine Höhe im Modell (oder woanders) speichern (wie bekomme ich JTree dazu genau diese zu verwenden? - ist das nicht unheimliches Renderer-Gefrickel?) oder eben diese Höhe einer Node im Tree (mit allem - ich sage mal "Astgezeichne") ermitteln und dann auf den rechten View anwenden.

Ich glaube mir dämmert was du meinst... Ich habe den GanttView bisher als komplett eigenständige Komponente betrachtet. Was du beschreibst liest sich eher danach als wolltest du einer Spalte im JTree einen GanttRenderer vepassen und gut iss. Das hört sich dann eher nach einer JTreeTable an....

View Rechts: Hier eignen sich ja generell JTable oder eben ein eigenes Layout mit JComponents. Wenn JTable benötige ich ja wieder ein Tablemodell. Kann man ein Treemodell mit einem Tablemodell "vereinigen"? Oder eben wenn allgemeingültiges Ganttmodell hier auch ein "Zwischenmodell"?

Es gibt JTreeTable als Gegenstand der betrachtung einer Serie von Tutorials von Sun. Ist schon mehrere Jahre alt und wird von mir in modifizierter Form benutzt, da ich noch auf Basis von java 1.4 entwickeln muss. Für Java 5 und neuer gibts in den SwingLabs JXTreeTable, weiterhin gibts einige im Web schwer zu findende kommerzielle Komponenten dieses Typs, die auch schonmal TableTree heißen..

Stichwort Listener:
Ich benötige ja dann Quasi 2 Listener: Einen SelectionListener im JTree links der rechts im View Neuladen oder Zeilen einfügen/entfernen verursacht. Und einen evtl. dafür falls sich ein Prozess geändert hat, worauf beide Views (oder nur der rechte) dann reagieren). Soweit richtig?
Was ich nicht verstehe ist Deine Aussage, dass ich einen Listener benötige um das Ganttmodell nicht jedesmal neu aufbauen zu müssen.
(+ evtl einen der nach Manipulation rechts Aktualisierungen links im JTree vornimmt)

Benötigt man - wenn die zwei Views direkt auf dem gleichen Modell arbeiten überhaupt solche Listener? (bis auf den SelectionListener natürlich)

Wenn du kein eigenes Model entwickelst nicht, nein.


Ein wirrer Gedanke zum Schluss: Sollen überhaupt beide Views auf einem Modell arbeiten? Im Prinzip ist doch der linke View das Modell für den rechten View. Denn nur expandierte (sichtbare) Nodes werden ja rechts dargestellt.

Wenn ich das richtig verstehe visualisiert der JTree eine Prozesshierarchie, während der Gantt-Graph für einen Prozess (und ggf. alle seine Unterprozesse) Infos bzgl. Verlauf der Prozessphasen auf einer Zeitachse darstellt. M.E. ist beides nicht ausschließlich auf demselben TreeModel sauber machbar.

Ob du nun zwei Models verwendest oder eines, das beide Aspekte berücksichtigt, hängt davon ab ob du dich entscheidest Prozesslandschaft + Gantt in einem gemeinsamen View oder in zwei getrennten (und irgendwie synchronsiierten) Views darzustellen. Letzteres ist natürlich flexibler für spätere Änderungen. Was mir auf Anhieb als Entscheidungskriterium einfällt ist die Informationsmenge im Gantt. Wenn du für einen Eintrag im JTree eine Zeile geringer Höhe im Gantt darstellen kannst und du absolut sicher bist, dass dies auf immer und ewig so bleiben wird, kannst du einen gemeinsamen View auf einem gemeinsamen Model entwickeln, mglw. aufbauend auf JTreeTable/JXTreeTable oder zumindest mit Anleihen bzgl. Umsetzung.
Nehmen wir aber mal an im Gantt sei ein Kalender abgebildet und jeder Eintrag könne Fließtext als Beschriftung enthalten und damit vielleicht recht hoch ausfallen, so würde das zu klaffenden Lücken im JTree führen und es wäre sinniger das vertikale Scrolling von GanttView und JTree getrennt zu machen, damit auf beiden Seiten gleichermaßen für Übersichtlichkeit gesorgt werden kann.

Mir hilft es immer mir ein blankes Blatt Papier zu schnappen, zu meinen Druckminenbleistiften zu greifen und mir Skizzen zu machen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JFreeChart Gantt Höhe Tasks AWT, Swing, JavaFX & SWT 1
A Swing JFreeChart, Gantt, Schichtplan AWT, Swing, JavaFX & SWT 3
L Gantt Chart - JFreeChart AWT, Swing, JavaFX & SWT 5
J Gantt-/Balken-/Netzplan - Diagramme AWT, Swing, JavaFX & SWT 8
Z Diagramm mit jfreechart quadratisch erstellen AWT, Swing, JavaFX & SWT 1
Farbtopf Diagramm für gewichtsprogramm AWT, Swing, JavaFX & SWT 9
B Signal als Diagramm darstellen AWT, Swing, JavaFX & SWT 6
R 2D-Grafik Messdiagramm - Diagramm über Zeit AWT, Swing, JavaFX & SWT 5
O Diagramm 3 Achsen 3D AWT, Swing, JavaFX & SWT 5
2 Einfaches XY Diagramm selbst zeichnen? AWT, Swing, JavaFX & SWT 6
P Diagramm in einem Applet zeichnen AWT, Swing, JavaFX & SWT 4
A Schachbrettartiges Diagramm mit JFreeChart AWT, Swing, JavaFX & SWT 4
G jfreechart (Diagramm speichern mit ein vorgegebenen Namen) AWT, Swing, JavaFX & SWT 6
G Diagramm erstellen AWT, Swing, JavaFX & SWT 4
G Diagramm erstellen AWT, Swing, JavaFX & SWT 12
D Diagramm im GUI Fenster anzeigen lassen? AWT, Swing, JavaFX & SWT 3
K Zufallszahlen, in einem Diagramm sortieren. AWT, Swing, JavaFX & SWT 39
Y Einbinden von Werten in ein Diagramm AWT, Swing, JavaFX & SWT 6
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben