Portal > Foren > Java > Allgemeine Java-Programmierung > grafischer Kalender
Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 05.01.2010, 12:44 Nach oben    #1
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard grafischer Kalender

Hallo.

Im Zuge meiner Diplomarbeit ist es notwendig, für unseren Auftraggeber einen grafischen Kalender zu programmieren. Mit diesem soll er sehen, wann seine Mitarbeiter bei welchem Kunden Tätigkeiten verrichten. Wichtig ist auch, dass ich auf jeden einzelnen Tag Zugriff habe. Z.B. am 23.3 ist Mitarbeiter x bei Kunde y und verrichtet Tätigkeit z.

Die erste Idee in unserem Projektteam war, diesen grafischen Kalender mit einer JTable zu realisieren. Allerdings hab ich keinen Plan, wie genau wir dies machen sollten.

Hab ihr noch andere Vorschläge?
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.01.2010, 16:49 Nach oben    #2
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Geht es darum, die Daten zu speichern?
Dazu könnt ihr eine ganz normale Datenbank verwenden ;).
Wenn der Kalender nur einen sehr geringen Umfang hat, würden sogar .txt-Dokumente reichen.

Diese Daten werden dann ausgelesen und in das JTable eingefügt.
Tutorials zu JTables sollten sicher irgendwo im Netz existieren, sodass die Umsetzung reine Lernsache ist.
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.01.2010, 19:39 Nach oben    #3
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

es soll ungefähr so sein, wie der Windows-Kalender. aber mit der Möglichkeit, jeden einzelnen Tag genau betrachten zu können.

zu den Daten: die Daten sind bereits in einer Datenbank gespeichert und werden auch aus dieser ausgelesen.

Mit der JTable kenn ich mich aus, danke.
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.01.2010, 19:55 Nach oben    #4
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 3.198
Standard

Kannst du dann nochmal konkreter sagen, wo dein Problem ist?
JTable kannst du, die Daten sind schon in der DB... klingt wie 'fast fertig'?!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.01.2010, 20:21 Nach oben    #5
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

eben, fast fertig, aber noch nicht ganz.

ich weiß noch nicht, wie ich diesen Kalender in der JTable darstellen soll. Vielleicht, dass jede Zelle ein Element von Date ist?
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2010, 07:01 Nach oben    #6
fka Gottzilla
 
Benutzerbild von The_S
 
Registriert seit: 02.02.2005
Ort: Würzburg
Beiträge: 754
Standard

Das ist imho recht unschön ... eine JTable ... wenn ich dein Prof wäre, wäre ich mit so ner 08/15 Lösung als Diplomarbeit nicht zufrieden. Programmiere dir doch eine Komponente selbst (selbst Zeichnen), oder verwende etwas bereits vorgefertigtes, bspw.: JCalendar Java Bean, a Java Date Chooser oder Microba Controls Home: DatePicker, CalndarPane, MarkerBar, GradientBar, JGraph Birdview
The_S ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2010, 10:51 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 20
Standard

Meiner Meinung nach ist es egal, ob Du eine JTable oder eine andere vorgefertigte Komponente nimmst. Bleibt sich doch gleich?
Ich würde die JTable erweitern, um sie auf meine Bedürfnisse anzupassen. Wie man richtig mit JTables arbeitet, dazu gibt es zuhauf Tutorials. Mehrzeilige JTables etc. Mein Tip: Lass Dich als Anfänger nicht darauf ein, alles grafische über HTML in eine JTable zu bringen. Das bringt nur Probleme mit dem Aus- und Einlesen. Arbeite mit dem TableCellRenderer. Versuch den zu verstehen, um die grafischen Elemente zu implementieren. Das entspricht der sauberen Trennung von Darstellung und Inhalt.
Ich gehe davon aus, dass es eine Diplomarbeit an einer FH ist? Ich meine, es ist ein (Trivial-)Implementierungslastiges Projekt. Oder ist eine Optimierung zusätzlich gewünscht?
Dreamdancer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2010, 13:23 Nach oben    #8
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

Wozu ist der TableCellRenderer gut? Ich hab mit dem noch nie gearbeitet.

Der Hinweis von dir hört sich gut an, Dreamdancer. Ich hab jetzt auch schon ziemlich konkrete Vorstellungen von diesem grafischen Kalender. Allerdings stellen sich mir noch ein paar Fragen.
Wie kann ich auf ein bestimmte Zelle zugreifen?
Wie schalte ich auf den nächsten Monat um?

Es ist in dem Sinn eigentlich keine Diplomarbeit. Ich hab heuer die Matura, und im Rahmen der 5. Klasse ist auch ein Projekt durchzuführen. In der 4.Klasse haben wir bereits ein Projekt gemacht, und auf Grund dieser Leistung wurde entschieden, ob das Projekten der 5. als Diplomarbeit zugelassen wird.

Das Projekt ist hauptsächlich Implementierungslastig. Der grafische Kalender ist ja natürlich nicht alles, sondern nur ein kleiner Teil eines großen Projekts.

Geändert von mrspritze (07.01.2010 um 13:26 Uhr)
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2010, 14:28 Nach oben    #9
Neuer Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 20
Standard

Ok.

Also Du musst Dich wirklich mit dem TableCellRenderer beschäftigen. Wenn Du ihn nicht verstehst, stocherst Du nur rum. Glaube mir das, ich kenn das aus eigener Erfahrung.

Im Prinzip ist es so, dass jede Zelle in einer JTable als JLabel implementiert ist. Der TableCellRenderer wird praktisch auf jede einzelne Zelle angewandt.

Die Zelle wird in dessen Konstruktor übergeben (value), deren Ort in der JTable (row, col) und die JTable selber (table). Damit arbeitest Du dann im TableCellRenderer.

Code:
public class Beispiel_CellRenderer implements TableCellRenderer {

	JLabel label = new JLabel();
	
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int col) 
	{
		if(value != null)
			label.setText(value.toString());
		label.setOpaque(true);							

		Border b = BorderFactory.createEmptyBorder(1, 3, 1, 1);
		label.setBorder(b);
		label.setFont(table.getFont());
		label.setForeground(table.getForeground());
		label.setBackground(table.getBackground());

		if(hasFocus) {
			label.setBackground(table.getSelectionBackground());
			label.setForeground(table.getSelectionForeground());
			label.setBorder( BorderFactory.createEtchedBorder(Color.LIGHT_GRAY, Color.DARK_GRAY));
		}
		else 
			if(isSelected) {
				label.setBackground(table.getSelectionBackground());
				label.setForeground(table.getSelectionForeground());
			} 
			else {
				// Angezeigte Spalte in Modellspalte umwandeln
				col = table.convertColumnIndexToModel(col);
				// Angezeigte Reihe in Modellreihe umwandeln
				row = table.convertRowIndexToModel(row);

			}

		if( col == 0  ) {

                       // MACHE ETWAS MIT ZELLEN IN DER 0. SPALTE

                       }

		return label;
	}
}

Nun habe ich es ja doch verraten

Und aufpassen: CellRenderer werden JTables immer nur fuer einen Datentyp zugeordnet (String, Integer, Object !!! (AHA) )

Geändert von Dreamdancer (07.01.2010 um 14:52 Uhr)
Dreamdancer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2010, 17:48 Nach oben    #10
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

ich hab jetzt mal eine ganz blöde Frage. Ich möchte zwei Strings auf Gleichheit prüfen. Das macht man ja normalerweise mit der equals()-Methode. Allerdings funktioniert das bei mir nicht. Warum? Hier der Code:

Code:
private void fillCalendar(int days,int weeks,String month,String year)
    {
        int j=0; //wochenzähler
        String day=new String();
        Date date;
        int i;
        boolean nextweek=false; //Flag, das Wochenbeginn kennzeichnet

        for (i=0;i<days;i++)
        {
            date=new Date (Integer.parseInt(year),Integer.parseInt(month)-1,i);
            SimpleDateFormat format=new SimpleDateFormat ("EEEE");
            day=format.format(date);
            System.out.println (day);
            if (day.equals("Sonntag"));
            {
                System.out.print (" Hallo");
            }
        }
    }
Der Code ist noch nicht ganz fertig. Ich wollte nur mal testen, ob das Programm richtig weiterspringt. Und jetzt sowas.
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2010, 17:58 Nach oben    #11
Neuer Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 20
Standard

Tja da müsstest Du evtl. debuggen.
Vielleicht hat sich ein Leerzeichen an den Tag drangehängt (zu lösen mit s.trim() ) oder sonstwas.

Aber eigentlich würde ich Dir empfehlen, die Wochentage als Enumeration (enum) zu implementieren.

Und vielleicht ein Buch lesen wie "Code Complete". Denn etwas wie:

Code:
int j=0; // wochenzähler
kann man auch wie folgt schreiben:

Code:
int wochenzaehler = 0
Ebenfalls mit days und i

Geändert von Dreamdancer (12.01.2010 um 18:09 Uhr)
Dreamdancer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2010, 18:36 Nach oben    #12
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

hab jetzt debuggt, und folgendes steht beispielsweise im Tag drinnen:
day "Freitag"

wie kann bei einem Vergleich zwischen "Freitag" und "Sonntag" true herauskommen?
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2010, 19:17 Nach oben    #13
Neuer Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 20
Standard

Ohne dabeigewesen zu sein vermute ich, dass der Fehler bei Dir liegt

Hast Du debuggt oder die Konsole zum debuggen benutzt? Die Konsole hilft Dir nicht weiter, da Du die zeitlichen Zusammenhänge nciht immer blicken kannst. Du musst wirklich debuggen, gewöhne Dir das gleich an. Der Vorteil daran ist, dass Du sehen wirst, dass wenn Freitag und Sonntag verglichen werden, kein true rauskommt

Ansonsten fällt mir auch nichts ein
Dreamdancer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2010, 19:22 Nach oben    #14
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Koblenz
Beiträge: 4.794
Standard

Zitat:
Zitat von mrspritze Beitrag anzeigen
wie kann bei einem Vergleich zwischen "Freitag" und "Sonntag" true herauskommen?
Ähm .. gar nicht?
__________________
Mehr TuS Koblenz geht nicht ... - TuS Koblenz Forum ... Benjamin Klaile ist noch in der Aufwärmphase
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2010, 21:41 Nach oben    #15
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

ich hab das Problem schon gelöst. Das Problem war der ; bei der if-Anweisung. So springt er nämlich immer in die if-Anweisung, egal ob in der Klammer true oder false herauskommt.

Danke derzeit an euch. Ich werde euch sicher bald wieder brauchen.
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.01.2010, 09:06 Nach oben    #16
Neuer Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 20
Standard

Mh ja das Semikolon
Dreamdancer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.01.2010, 17:05 Nach oben    #17
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

und ich brauch euch tatsächlich schon wieder

mein Kalender ist eine JTable. In dieser JTable möchte ich den aktuellen Tag (also eine bestimmte Zelle) mit einer Farbe markieren. Dazu brauch ich den CellRenderer meiner Tabelle. Ich weiß auch, dass ich dazu die Methode setBackground benötige.

Leider weiß ich nicht, wie ich genau diese bestimmte Zelle bekomme. Wisst ihr, wie das funktioniert?
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.01.2010, 08:48 Nach oben    #18
Neuer Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 20
Standard

Probier doch erstmal, etwas zu recherchieren.

Den CellRenderer, den ich Dir gegeben habe, übergibt im Konstruktur die Reihe und die Spalte. Wenn Du im Teil, wo Du den Code einbetten sollst, einfache if-Abfragen bzgl. Zeile und Spalte implementierst, hast Du Deine Zelle.
Anders kannst Du auch über den Wert Deine Farben setzen (Object value).

Wie gesagt, der Konstruktur wird für jede Zelle aufgerufen...
Dreamdancer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.01.2010, 21:52 Nach oben    #19
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

ein weiteres Problem ist von mir das setzen der Werte im Kalender. es funktionieren leider nicht alle Monate. Mein Programm stürzt genau dann ab, wenn noch nicht alle Werte gesetzt wurden, aber die letzte Zelle schon erreicht wurde. Könnt ihr mir vielleicht helfen, wie ich mein Problem löse? Hier der Quellcode:

Code:
private void fillCalendar(int days,int weeks,String month,String year, String currentday)
    {
        int j=0; //wochenzähler
        int currday=Integer.parseInt(currentday); //aktueller Tag
        String day=new String();
        Date date;
        int i;
        boolean nextweek=false; //Flag, das Wochenbeginn kennzeichnet
        int dayinweek=0;

        for (i=0;i<days;i++)
        {
            date=new Date (Integer.parseInt(year),Integer.parseInt(month)-1,i);
            SimpleDateFormat format=new SimpleDateFormat ("EEEE");
            day=format.format(date);
            if (day.equals("Montag"))
            {
                if (date.getDate()!=1)
                {
                    nextweek=true;
                }            
            }
            if (nextweek)
            {
                j++;
                nextweek=false;
            }

            if (day.equals("Montag"))
                dayinweek=0;
            else if (day.equals("Dienstag"))
                dayinweek=1;
            else if (day.equals("Mittwoch"))
                dayinweek=2;
            else if (day.equals("Donnerstag"))
                dayinweek=3;
            else if (day.equals("Freitag"))
                dayinweek=4;
            else if (day.equals("Samstag"))
                dayinweek=5;
            else if (day.equals("Sonntag"))
                dayinweek=6;

            DefaultTableCellRenderer rend=(DefaultTableCellRenderer) table.getCellRenderer(j, dayinweek);
            rend.setHorizontalAlignment(JLabel.CENTER);
            if (currday==i)
            {
                TableCellEditor editor=table.getCellEditor();
            }
            /*if (i<days&&j==weeks)
            {
                DefaultTableModel model=(DefaultTableModel)table.getModel();
                model.addRow(null);
            }*/
            table.setValueAt(i+1, j, dayinweek);
        }
    }
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.01.2010, 14:35 Nach oben    #20
Benutzer
 
Registriert seit: 25.12.2009
Beiträge: 47
Standard

kann mir denn keiner bei meinem Problem helfen? ich bin mit meinem Latein am Ende.
mrspritze ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Passwort ver- und entschlüsseln mrspritze Allgemeine Java-Programmierung 41 30.12.2009 12:25
Features Kalender The_S Plauderecke 28 25.07.2005 15:30


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47