![]() |
| | LinkBack | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 25.12.2009
Beiträge: 47
|
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? |
| | |
| | Nach oben #2 |
| Erfahrener Benutzer Registriert seit: 16.08.2008 Ort: Mecklenburg-Vorpommern
Beiträge: 314
|
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. |
| | |
| | Nach oben #3 |
| Benutzer Registriert seit: 25.12.2009
Beiträge: 47
|
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. |
| | |
| | Nach oben #4 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 3.198
|
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: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
| | Nach oben #6 |
| fka Gottzilla Registriert seit: 02.02.2005 Ort: Würzburg
Beiträge: 754
|
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 |
| | |
| | Nach oben #7 |
| Neuer Benutzer Registriert seit: 02.12.2009
Beiträge: 20
|
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? |
| | |
| | Nach oben #8 |
| Benutzer Registriert seit: 25.12.2009
Beiträge: 47
|
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) |
| | |
| | Nach oben #9 |
| Neuer Benutzer Registriert seit: 02.12.2009
Beiträge: 20
|
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) |
| | |
| | Nach oben #10 |
| Benutzer Registriert seit: 25.12.2009
Beiträge: 47
|
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");
}
}
}
|
| | |
| | Nach oben #11 |
| Neuer Benutzer Registriert seit: 02.12.2009
Beiträge: 20
|
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 Code: int wochenzaehler = 0 Geändert von Dreamdancer (12.01.2010 um 18:09 Uhr) |
| | |
| | Nach oben #13 |
| Neuer Benutzer Registriert seit: 02.12.2009
Beiträge: 20
|
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 |
| | |
| | Nach oben #14 | |
| Erfahrener Benutzer Registriert seit: 02.12.2004 Ort: Koblenz
Beiträge: 4.794
| Zitat:
__________________ Mehr TuS Koblenz geht nicht ... - TuS Koblenz Forum ... Benjamin Klaile ist noch in der Aufwärmphase | |
| | |
| | Nach oben #15 |
| Benutzer Registriert seit: 25.12.2009
Beiträge: 47
|
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. |
| | |
| | Nach oben #17 |
| Benutzer Registriert seit: 25.12.2009
Beiträge: 47
|
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? |
| | |
| | Nach oben #18 |
| Neuer Benutzer Registriert seit: 02.12.2009
Beiträge: 20
|
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... |
| | |
| | Nach oben #19 |
| Benutzer Registriert seit: 25.12.2009
Beiträge: 47
|
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);
}
}
|
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ä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 |