Swing Terminkalender Wochenansicht mit Gridbaglayout oder JTable

John1983

Mitglied
Hallo zusammen,

wie die Jungfrau zum Kinde bin ich irgendwann doch bei Java gelandet. Nach langjaehriger Erfahrung mit Ansi C auf Mikrocontroller Ebene wollte ich neue Dinge ausprobieren. Bisher habe ich mich ganz gut geschlagen, okay OO braucht schon eine Weile bis die Konzepte im Kopf sind :)

Zum Hintergrund:
Mein Ziel ist es einen Terminkalender zu programmieren. Fuer die Anzeige der Termine gibt es eine Tages- und eine Wochenansicht. Der Benutzer kann Termine ueber ein Dialogfenster hinzufuegen.

Mein Problem bezieht sich lediglich auf die beste Umsetzung fuer das Layout. Leider bieten die kostenlosen Alternativen keine wirklich Loesung (brauchbar scheint mir der MIG Kalender aber leider auch teuer). Somit habe ich angefangen eine eigenes Layout zu basteln.

Tagesansicht mit Gridbaglayout
Die Tagesansicht habe ich mit einem GridBagLayout umgesetzt. In der linken Gridspalte stehen die Zeiten im Abstand von 30 min. In der rechten Gridspalte werden die Termine eingetragen.

Ich habe mich fuer das Gridbaglayout entschieden da ich die Hoehe der Zellen dynamisch je nach Anzahl Termine gestalten moechte.
=> Sind von 8:00 bis 8:30 uhr keine Termine eingetragen soll die Zelle eine minimale Hoehe besitzen.
Sind von 8:30 bis 9:00 10 Termin eingetragen soll diese Zelle entsprechend hoch sein.

Das Gridbag sitz in einem ScrollPane.

Die Termine habe ich als JButton umgesetzt die dann zum JPanel des jeweiligen Grids hinzugefuegt werden. Sprich: In jeder Zelle liegt per default ein JPanel.

Fuer die Wochenansicht wollte ich aehnlich fortfahren, bin mir nun allerdings nicht sicher ob diese Loesung zu hungrig ist da zu viele JPanels verwendet werden.

Wird zwischen den Ansichten gewechselt wird die neue Ansicht dynamisch erstellt und die Termine eingetragen.

Inzwischen hat mich etwas der Mut verlassen weil ich unsicher bin ob ich auf dem richtigen Weg bin. Laut Google verwenden viele Leidensgenossen JTable und einem eigenen Modell. Bei JTable kann man vermutlich aber die Hoehe der Zellen nicht dynamisch verwalten. Richtig?

Ich erwarte hier keine Programmierhilfestellung (vielleicht spaeter ;-)) sondern eher einen Rat von erfahrenen SWING GUI Entwicklern.
Ich programmiere in Eclipse und schreibe die GUI per Hand.

Ich bin sehr dankbar fuer einen guten Rat wie der richtige Weg aussehen koennte.

Vielen Dank fuer die Unterstuetzung

Thanks
John
 

Gossi

Bekanntes Mitglied
Also wenn ich das richtig verstanden habe, möchtest du jeden Termin in der Wochenansicht anzeigen?

Das wäre evtl. wirklich etwas viel. Versuch doch ein Layout für die Wochenansicht zu machen, wo du Tage mit einem Termin farblich markierst. Bei einem Klick auf einen Tag wird dann ein Fenster geöffnet, welches die Termine anzeigt (Und evtl. einen Button zum erstellen neuer Termin bereitstellt, für eben diesen Tag)

Gruß Gossi
 

John1983

Mitglied
Hi Gossi und vielen Dank fuer die schnelle Antwort.

Du hast vermutlich recht mit deinem Vorschlag. Was denkst du denn prinzipiell ueber die Vorgehensweise mit dem Gridbaglayout?
 

Gossi

Bekanntes Mitglied
Hi Gossi und vielen Dank fuer die schnelle Antwort.

Du hast vermutlich recht mit deinem Vorschlag. Was denkst du denn prinzipiell ueber die Vorgehensweise mit dem Gridbaglayout?

Die Idee ist auf jedenfall nicht schlecht, aus den von dir bereits genannten Gründen.
Für die Wochenansicht kannst du auch ein GBL benutzen, falls du dies noch nicht getan hast, kannst du dir ja auch mal die LayoutManager anschauen, vielleicht findest du dort ja auch was interessantes.
 

John1983

Mitglied
Es ist immer wieder erstaunlich. Ich habe mich mit diesem Problem das ganze WE rumgeschlagen und wahnsinnig viele Beitraege im Netz gelesen.
Am Schluss wusste ich ueberhaupt nicht mehr ob ich auf dem richtigen Weg bin. Nachdem ich hier aber meinen Post geschrieben habe, scheinen alleine
dadurch einige Dinge klarer zu werden.

Vielleicht befinde ich mich mit dem Gridbaglayout doch auf dem Holzweg. Anstatt die Zellen je nach Inhalt groesser zu machen, koennte ich auch die
Groesse der Termine verkleinern.
Eine Zelle halt demnach immer die gleiche Groesse. Sind 10 Termin in einer Zelle, wird dementsprechend die Flaeche auf die 10 Termine
verteile.

Statt fuer die Termine einen JButton zu verwenden koennte ich ein eigenes JLabel verwenden und das Layout veraendern (mit Farbcodierung etc). Beim Draufklicken auf einen Termin werden
dann dessen Details angezeigt.

Vielleicht bietet sich fuer diesen Fall dann doch eine JTable an. Ein oder mehrere JLabel (= Termine) kann ich dann bestimmt auch zu einer Zelle hinzufuegen mit dem entsprechenden Cell Renderer. Richtig?
Das GridLayout faellt vermutlich flach da alle Zellen gleich gross sind. Die Zellen fuer die Wochentage muessen ja nicht unbedingt so gross sein wie die die restlichen Zellen.

Ich denke es macht also doch Sinn eine JTable zu verwenden.

Spricht irgendwas dagegen unter meinen genannten Vorstellungen?
 

Gossi

Bekanntes Mitglied
Soweit ich weiß (ich kenne mich mit JTables weig aus), spricht nichts dagegen, es könnte jedoch für den späteren Benutzer komisch wirken wenn du einen Termin am Montag um 8:30 anklickst und die gesamte Zeile 8:30 (also auch die anderen Wochentage) werden farblich hinterlegt, ich weiß nicht ob man das abschalten kann, aber ich wüsste nicht wie.

Falls es mit der Tabelle nix werden sollte (hier trete ich mal an die anderen ab :)) kannst du dir ja das hier mal anschauen.
 

John1983

Mitglied
Danke fuer den Link. Die Layoutmanager kenne ich. Das mit dem Gridbaglayout habe ich ja schon testweise fuer die Tagesansicht umgesetzt.
Was mir daran einfach nicht gefaellt ist, ist die Tatsache dass ich fuer jedes Grid ein JPanel hinterlegt werden muss damit ich die Umrandungen (Borders)
hinbekommen wie bei einer Tabelle
.

Auf dieses JPanel setze ich dann die JLabel (= Termine).

Das ist bei einem Tag kein Problem, es kommen aber trozdem 48 JPanel auf einen Tag (ein JPanel pro halbe Stunde, eventuell sogar ein Jpanel pro 15 min)

Bei einer Woche ist dass ja das 7 fache. Ich habe immer die Sorge dass meine GUI dann traege wird. Hier fehlt mir aber leider auch etwas das Gefuehl.

Was meinst du dazu, ist das nicht sehr viel ?

Btw... vielen Dank fuer deinen Input :)
 

Gossi

Bekanntes Mitglied
Bei einer Woche ist dass ja das 7 fache. Ich habe immer die Sorge dass meine GUI dann traege wird. Hier fehlt mir aber leider auch etwas das Gefuehl.

Was meinst du dazu, ist das nicht sehr viel ?

Es kommt drauf an wie du es umsetzt und was du später machst...

Wenn dein Ziel ist, alle 15ms die komplette GUI upzudaten, dann ist es zu viel.

Wenn du die Gui, oder besser nur das eine entsprechende Panel, nur updatest, wenn sich darauf etwas ändert, sollten 336 (bzw. 672, wobei das schon an der Grenze ist) Panels kein großes Problem sein, lediglich das starten des Programmes könnte etwas dauern...

Und ganz wichtig, wenn du deine GUI updatest, benutze dafür einen extra Thread, nicht den "Main"-Thread, da sich in dem Fall die GUI solange aufhängt, wie die aktualisierung braucht.
 

John1983

Mitglied
Vielen Dank fuer den Hinweis.

Vielleicht melden sich noch andere Leidensgenossen die schon vor der gleichen Entscheidung standen. Mir ist einfach noch nicht klar welche
Fallstricke ich mir hole, wenn ich nun auf Gridbaglayout oder JTable setze. Es kann leider gut sein, dass ich bei der Implementierung erkenne
dass ich auf das falsche Pferd gesetzt habe.

Ich habe mal nachfolgend die Vor -und Nachteile der Moeglichkeiten in Besug auf Tages und Wochenansicht aufgelistet.

Gridbaglayout:
+ Flexibles Layout (Headerzeile kann weniger hoch sein wie restliche Zellen)
+ Mehrere JPanels (= Termine) koennen zu einem Grid bzw zu dessen JPanel hinzugefuegt werden
- Eventuell Resourcenhungrig da pro Grid ein JPanel benoetigt wird um einen Rahmen darzustellen

JTable
+ Weniger Resourcenverbrauch, da Rahmen autom. angezeigt wird (kein JPanel pro Grid notwendig)
- Unsicher ob mehrere JPanels (= Termine) zu einer Zelle hinzugefuegt werden koennen (wenn dann nur ueber eigenes Modell / Renderer)
- Aufwendig da eigenes TableModel erstellt werden muss
o Alle Zellen sind gleich gross

Bin froh ueber Ergaenzungen.

Danke
 

Michael...

Top Contributor
Das ist bei einem Tag kein Problem, es kommen aber trozdem 48 JPanel auf einen Tag (ein JPanel pro halbe Stunde, eventuell sogar ein Jpanel pro 15 min)
abhängig von Deinen Java Kenntnissen, würde ich einfach sieben JPanels in einem GridLayout nebeneinander anordnen. Die Termine auf den "TagesPanels" würde ich per überschreiben der paintComponent selbst zeichnen.
 
V

vanny

Gast
Vielleicht mal ein anderer Ansatz:

Da du ja neue Termine per Dialog eingibst/änderst (finde ich eine gute Lösung), dient die Terminübersicht ja nur noch der Darstellung.
Dann könntest du auch eine JList nehmen und die Einträge per CellRenderer immer schick hinformatieren.

Generell würde ich jedoch nur vorhandene Termine rendern/darstellen, das schafft Übersicht für dich und die Benutzer.

Gruß Vanny
 
J

John18983

Gast
Das ist durchaus ein interessanter Ansatz! Ich werde mir die Möglichkeiten noch durchdenken.
Hat noch irgendjemand eine Idee was gegen das Gridbaglayout oder für eine JTable sprechen könnte?

Hinweise sind gerne willkommen.

Sobald ich wieder paar Stunden am Stück zum programmieren habe werde ich Euch auf dem Laufenden halten.. das könnte ja eventuell auch eine Hilfestellung für Andere sein :)
 

John1983

Mitglied
Kann man so eine ansicht wie in der folgenden Grafik eigentlich ueber eine JTable realisieren, speziell auch mit ScrollPane ?
 

Anhänge

  • Woche.jpg
    Woche.jpg
    50,3 KB · Aufrufe: 46

GUI-Programmer

Top Contributor
Kann man so eine ansicht wie in der folgenden Grafik eigentlich ueber eine JTable realisieren, speziell auch mit ScrollPane ?

Ich denke mal, dass das auf jeden Fall möglich ist. Fragt sich nur mit wie viel Aufwand! Denn JTable ist imho einer der mächtigsten Komponenten überhaupt - es gibt ein TableModel, TableCellRenderer, TableColumnModel, ... und vieles mehr. Ob du dir die Zeit dafür nehmen willst bleibt dir überlassen. Ich persönlich habe mit JTable kaum Erfahrung (lediglich mal Daten einlesen, anzeigen, verändern, speichern), aber ich denke es gibt hier genug Benutzer die sich damit auskennen und dir auch bestimmt sagen könnne, was du nun genau bräuchtest. Evlt. hilft dir am Anfang auch einfach mal das: How to Use Tables falls du es nicht schon kanntest.

Was ich noch dazu sagen kann, ist, dass es sich vermutlich lohnt/sinnvoll wäre für die Zellen im Header der JTable sich eine eigene Komponente zu schreiben (also von JComponent oder JPanel erbt).
 

Michael...

Top Contributor
Kann man so eine ansicht wie in der folgenden Grafik eigentlich ueber eine JTable realisieren, speziell auch mit ScrollPane ?

So etwas ist durchaus mit JTable und JScrollPane möglich.
- die Darstellung des Table Headers kann man mittels eines TableCellRenderers beliebig anpassen
Code:
table.getTableHeader().setDefaultRenderer(TableCellRenderer)
- die Zeitleiste kann man mittels einer Komponente im RowHeader der ScrollPane darstellen
Code:
scrollPane.setRowHeaderView(Component)
 

John1983

Mitglied
super vielen Dank fuer die Aufklaerung ich war mich bisher absolut nicht sicher. Da ich nun aber weiss dass das mit endlichem Aufwand moeglich ist, bin ich gerne bereit den Aufwand zu investieren.

jetzt weiss ich ja dass es theoretisch moeglich ist :):D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S GridBagLayout Felder formatieren AWT, Swing, JavaFX & SWT 1
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
C GridbagLayout verstehen lernen AWT, Swing, JavaFX & SWT 1
H GridBagLayout macht mich wahnsinnig :-( AWT, Swing, JavaFX & SWT 5
BabySuna darstellungsprobleme mit JTabbedPane und GridBagLayout AWT, Swing, JavaFX & SWT 8
CptK Positionieren von Elementen in GridBagLayout AWT, Swing, JavaFX & SWT 4
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
Mario1409 AWT GridBagLayout AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
K GridBagLayout mit reponsive Design AWT, Swing, JavaFX & SWT 2
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
T GridBagLayout Anfängerprobleme AWT, Swing, JavaFX & SWT 3
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
L GridBagLayout Anordnung AWT, Swing, JavaFX & SWT 3
M Gridbaglayout Spaltenbreite AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
V GridBagLayout AWT, Swing, JavaFX & SWT 4
N LayoutManager GridBagLayout - Grundlagen AWT, Swing, JavaFX & SWT 6
Neumi5694 Swing Gridbaglayout - automatische Anpassung verhindern AWT, Swing, JavaFX & SWT 1
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
M Swing GridBagLayout Komponentengröße festsetzen AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
HarleyDavidson Swing Seltsames Verhalten GridBagLayout AWT, Swing, JavaFX & SWT 11
W GridBagLayout mit fester Zellgrösse AWT, Swing, JavaFX & SWT 2
N Swing GridBagLayout: Ein Pixel Versatz AWT, Swing, JavaFX & SWT 2
B Swing Gridbaglayout unterschiedliche Zeilenhöhe AWT, Swing, JavaFX & SWT 6
H LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 1
N GridBagLayout - was fehlt? AWT, Swing, JavaFX & SWT 8
S Swing rowHeight und rowWeight im GridBagLayout AWT, Swing, JavaFX & SWT 1
N Swing GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 4
A jpanel mit gridbaglayout auf hintergrundbild AWT, Swing, JavaFX & SWT 7
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
G GridBagLayout AWT, Swing, JavaFX & SWT 6
S GridBagLayout "links-rechts-layouten" AWT, Swing, JavaFX & SWT 7
T LayoutManager GridBagLayout / erwartetes Raster fehlt AWT, Swing, JavaFX & SWT 3
X Gridbaglayout gridx + gridy auslesen? AWT, Swing, JavaFX & SWT 7
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
N GridBagLayout - Zeitplan AWT, Swing, JavaFX & SWT 13
N Swing GridbagLayout AWT, Swing, JavaFX & SWT 4
S Swing gridbaglayout AWT, Swing, JavaFX & SWT 8
G GridBagLayout Problem AWT, Swing, JavaFX & SWT 4
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
X LayoutManager gridBagLayout wird nicht richtig Dargestellt AWT, Swing, JavaFX & SWT 5
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
N LayoutManager GridBagLayout schummeln erlaubt ? AWT, Swing, JavaFX & SWT 2
D GridBagLayout AWT, Swing, JavaFX & SWT 9
A Swing GridBagLayout - constraints.anchor scheint nicht korrekt zu funktionieren? AWT, Swing, JavaFX & SWT 7
C LayoutManager GridBagLayout - Anfängerfrage AWT, Swing, JavaFX & SWT 5
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
R GridBagLayout in GridBagLayout AWT, Swing, JavaFX & SWT 2
H Positionierungsprobleme beim GridBagLayout AWT, Swing, JavaFX & SWT 16
Furtano AWT GridBagLayout macht mir Sorgen AWT, Swing, JavaFX & SWT 3
A GridbagLayout positionierungsproblem AWT, Swing, JavaFX & SWT 4
earlgrey_tea GridBagLayout Componenten proportional vergößern AWT, Swing, JavaFX & SWT 12
D JTable im GridBagLayout -> gridwidth AWT, Swing, JavaFX & SWT 6
T GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
D Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 8
J Swing GridBagLayout: Links-nach-rechts Orientierung statt zentriert AWT, Swing, JavaFX & SWT 12
R Größe eines Labels bei GridBagLayout festlegen AWT, Swing, JavaFX & SWT 9
B GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 11
E LayoutManager GridBagLayout in BorderLayout - Abstand bei Resizing AWT, Swing, JavaFX & SWT 2
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
N GridBagLayout Problem AWT, Swing, JavaFX & SWT 6
C Swing JTable "zerstört" GridBagLayout AWT, Swing, JavaFX & SWT 9
N LayoutManager GridBagLayout Größe fixieren AWT, Swing, JavaFX & SWT 3
M GridBagLayout AWT, Swing, JavaFX & SWT 7
V Swing Gridbaglayout Leeres Fenster AWT, Swing, JavaFX & SWT 2
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
N GridBagLayout AWT, Swing, JavaFX & SWT 11
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
Y Swing GridbagLayout JTextfield zu klein AWT, Swing, JavaFX & SWT 5
L LayoutManager GridBagLayout spielt verrückt AWT, Swing, JavaFX & SWT 9
T LayoutManager GridBagLayout an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 2
J Java GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 3
Y LayoutManager Problem mit Gridbaglayout AWT, Swing, JavaFX & SWT 8
hdi LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 9
W GridBagLayout Falsche Größenanpassung AWT, Swing, JavaFX & SWT 6
R Swing Button-Größe in JPanel mit GridBagLayout nicht änderbar AWT, Swing, JavaFX & SWT 3
E Problem mit meiner GUI/GridbagLayout AWT, Swing, JavaFX & SWT 2
M LayoutManager GradientPaint auf GridBagLayout AWT, Swing, JavaFX & SWT 5
D LayoutManager GridBagLayout, Änderung zur Laufzeit AWT, Swing, JavaFX & SWT 4
G LayoutManager per Button GridBagLayout + Inhalt ändern AWT, Swing, JavaFX & SWT 2
M GridBagLayout zeilenweise füllen AWT, Swing, JavaFX & SWT 5
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
hdi Swing Problem mit GridBagLayout AWT, Swing, JavaFX & SWT 2
E LayoutManager GridBagLayout kurz vorm Wahnsinn! AWT, Swing, JavaFX & SWT 22
P Swing GridBagLayout bleibt nicht so wie es ist :( AWT, Swing, JavaFX & SWT 8
M gridbaglayout - abstand bei label und field AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben