Datumseingabe via Dropdown

Hallo liebe Community,

da ihr mir das letzte mal schon so erfolgreich geholfen habt, wende ich mich hier mit einem neuen Problem an euch.

Und zwar habe ich angefangen mein Programm auf eine grafische Benutzeroberfläche abzuändern. Nun hänge ich bei folgendem Problem.

Ich möchte das Aktuelle Datum über 3 verschiedene Comboboxen mit Actionlistener einlesen lassen. Ich habe also jeweils eine Combobox für Jahr, Monat und Tag. Nun ist es ja so, das nicht jeder Monat die gleiche Anzahl an Tagen hat, weswegen ich die Arraylist "Tag" nicht vorher deklarieren kann. Und zwar solls so ablaufen, das ich zuerst das Jahr und Monat auswählen lasse, während "Tag" noch ohne Daten sind, so dass niemand da etwas falsches auswählen kann. Sobald beide eingetragen sind, soll die ArrayList für "Tag" gefüllt werden, mit der berücksichtung auf Schaltjahr und den Monat, und ggf. soll dieses dann auch wieder rausgeschmissen werden, falls jemand dann nochmal Jahr oder Monat ändert.
Bei der Abfrage wie viele Tage die ArrayList denn nun haben soll, dachte ich an eine einfache If-abfrage ob schaltjahr und welcher monat.

Momentan ist es so das ich bei der Auswahl des Jahres eine ClassCastException bekomme.

Die Schaltjahrabfrage hab ich bisher noch nicht eingebaut, aber das ist ja keine große Sache und lässt sich hinterher einbauen.

Bisher sieht mein quellcode deshalb recht zusammengewürfelt aus:

[Java]
public class DropDownTagListener implements ActionListener
{

public void actionPerformed(ActionEvent event)
{

tag = (Integer) dropdowntag.getSelectedItem();
}

}
public class DropDownMonatListener implements ActionListener
{

public void actionPerformed(ActionEvent event)
{
monat = dropdownmonat.getSelectedIndex();
if (monat == 0)
{
String[] dropdownliste = {""};

}
if (monat == 2)
{
String[] dropdownliste = {"1",...,"28"};

}
else if (monat == 1 ||monat == 3 ||monat == 5 ||monat == 7 ||monat == 8 ||monat == 10 ||monat == 12)
{
String[] dropdownliste = {"1",...,"31"};

}
else
{
String[] dropdownliste = {"1",...,"30"};
}
}

}
public class DropDownJahrListener implements ActionListener
{

public void actionPerformed(ActionEvent event)
{

jahr = (Integer)dropdownjahr.getSelectedItem();

}

}

[/code]

weiter unten im Quellcode(Main) werden diese dann deklariert und aufgerufen:
Java:
	fenster = new JFrame("Fenster");
	dropdowntag = new JComboBox(dropdownliste);
	dropdownmonat = new JComboBox(dropdownliste2);
	dropdownjahr = new JComboBox(dropdownliste3);
	dropdowntag.addActionListener(new DropDownTagListener());
	dropdownmonat.addActionListener(new DropDownMonatListener());
	dropdownjahr.addActionListener(new DropDownJahrListener());
	JPanel sued = new JPanel();
	fenster.add(BorderLayout.SOUTH, sued);
	SendButton = new JButton("Senden");
	AbortButton = new JButton("Abbrechen");
	sued.add(BorderLayout.WEST, SendButton);
    sued.add(BorderLayout.EAST, AbortButton);
    JPanel center = new JPanel();
    fenster.add(BorderLayout.CENTER,center);
    center.add(BorderLayout.WEST, dropdowntag);
    center.add(BorderLayout.CENTER, dropdownmonat);
    center.add(BorderLayout.EAST, dropdownjahr);
	fenster.setVisible(true);
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	fenster.setSize(300,300);
	SendButton.addActionListener(new SendButtonListener());
	AbortButton.addActionListener(new AbortButtonListener());

Ich danke schonmal im Vorraus falls ihr helfen könnt. Bei Rückfragen stehe ich auch gern zur Verfügung.
 

nrg

Top Contributor
da wäre vllt gleich JXDatePicker eine überlegung

edit: vllt helfen dir dabei auch die beiden methoden:

Java:
	public int getNumberOfDays(int month, int year) {
		if (month == 2) return isLeapYear(year) ? 29 : 28;
		if (month < 8) 	return month % 2 == 0 ? 30 : 31;
		return month % 2 == 0 ? 31 : 30; 
	}
	
	public boolean isLeapYear(int year) {
		return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
	}

sind recht schnell hingekritzelt also gebe ich mal keine garantie auf richtigkeit :). month von getNumberOfDays ist 1-based

edit2: so müsste es passen ;). am besten nimmst du da eh Calender oder s.o > JXDatePicker
 
Zuletzt bearbeitet:
Wenn das der Fehler ist, hilft wahrscheinlich Zeile 45 durch die folgende zu ersetzen:

[JAVA=44]
...
jahr = dropdownjahr.getSelectedIndex();
...
[/code]

getSelectedIndex() liefert einen Integer zurück.

VG ROlf

Das dachte ich mir anfangs auch, das Problem dabei ist aber, dass ich ja das Jahr auslesen lassen will, lese ich also nun den Index aus, bekomme ich ja den Index des Jahres das ausgewählt wurde, und aus dem Index das Jahr herauszubekommen, fällt mir nur eine If bzw Switch anweisung ein, wäre zwar möglich aber unkomfortabel.
 

nrg

Top Contributor
habs nur halt gelesen :). Wobei es trotzdem eher ein JXDatePicker sein sollte.

exiplizit zu deinem Problem: gibt es keine ClassCastException? du musst halt auch ein Integer-Array in die JComboBox packen um das danach auch wieder easy casten zu können. Ansonsten müsst du es mit Integer.parseInt parsen..
 
habs nur halt gelesen :). Wobei es trotzdem eher ein JXDatePicker sein sollte.

exiplizit zu deinem Problem: gibt es keine ClassCastException? du musst halt auch ein Integer-Array in die JComboBox packen um das danach auch wieder easy casten zu können. Ansonsten müsst du es mit Integer.parseInt parsen..
Java:
		int j = kontrolljahr;
		for (int i = 0;i < 50;i++)
		{	
			dropdownliste3[i] = String.valueOf(j);
			j++;
		}

Ja es gibt eine ClassCastException, wie oben beschrieben, und in der Combobox von jahr steckt ein... na sowas :D wieso hab ich denn da String, ist wohl irgendwie da hängen geblieben. Hab das geändert, der Fehler ist beseitigt^^ danke.

Bleibt immernoch das Problem mit der Tages-Combolist. Über die Datepicker wäre eine möglichkeit, vllt switche ich noch darauf um. Trotzdem lässt mich das Problem nicht in ruhe^^ ich meine fürs allgemeine Verständnis wäre es super es zu wissen, auch wenn ich dann im jetzigen Moment darauf verzichten könnte, hoffe ihr versteht das^^. Man will ja auch was lernen und nicht nur stupide Copy+Paste abarbeiten bis es läuft.
 

r.w.

Bekanntes Mitglied
Das dachte ich mir anfangs auch, das Problem dabei ist aber, dass ich ja das Jahr auslesen lassen will, lese ich also nun den Index aus, bekomme ich ja den Index des Jahres das ausgewählt wurde, und aus dem Index das Jahr herauszubekommen, fällt mir nur eine If bzw Switch anweisung ein, wäre zwar möglich aber unkomfortabel.

Sorry, da hab ich gepennt.
Du brauchst hier natürlich den nach int konvertierten Inhalt und nicht den Index. ;-)
 

nrg

Top Contributor
Ja es gibt eine ClassCastException, wie oben beschrieben, und in der Combobox von jahr steckt ein...

achso hattest du bereits geschrieben. wie gesagt, habs nur überflogen :oops:
trotzdem gehört da imho eher ein integer-array rein. dann kannst du nämlich auch ganz normal casten

Bleibt immernoch das Problem mit der Tages-Combolist. Über die Datepicker wäre eine möglichkeit, vllt switche ich noch darauf um. Trotzdem lässt mich das Problem nicht in ruhe^^ ich meine fürs allgemeine Verständnis wäre es super es zu wissen, auch wenn ich dann im jetzigen Moment darauf verzichten könnte, hoffe ihr versteht das^^. Man will ja auch was lernen und nicht nur stupide Copy+Paste abarbeiten bis es läuft.
habe dir oben ein codeschnipsel geschrieben, der dir von monaten die anzahl der tage liefert. ansonsten nimm halt calendar
 
Die Anzahl der Tage hab ich ja, dass is nicht das Problem, sondern eher, diese Werte dann auch in der Combobox erst anzeigen zu lassen wenn das Jahr und Monat eingeben sind. Gibt es da eine Methode die Combobox zu aktualisieren, dass sie ihren neuen Inhalt auch wirklich erkennt?
 

Fu3L

Top Contributor
Je nach Layoutmanager könnte es leicht sein, die ComboBox zu entfernen, eineneu zu erzeugen und ins Layout zu packen. Du könntest aber auch .removeAllItems() und .addItem() nutzen^^
 

nrg

Top Contributor
ach wenns in der arbeit schnell gehen muss, sollte ich besser nicht soviel überfliegen :). vergess das dann, wenn es an der stelle weniger passte
 

Ähnliche Java Themen

Neue Themen


Oben