Datums Eingabe

Sieht doch schon ganz gut aus. Vielleicht liest du dir mal das Kapitel über Layouts von "Java ist auch eine Insel" durch und versuchst mal alles was die Ansicht der Tage betrifft in eine eigene Methode auszulagern.

Pack mal alles was in deiner main ist in eine neue Methode init() und schreib bitte kein static davor. static sollte im Normalfall nur vor der main stehen! Alles andere sollte zu Objekten gehören. Also auch vor den Feldern da oben bitte das static wegnehmen!

Dann machst du in der main nur noch
Java:
public static void main(String [] args){
    Kalender kal = new Kalender();
}
und fügst der Klasse Kalender noch einen Konstruktor hinzu:
Java:
public Kalender(){
   init();
}
 
Hi,

ja also ich hab jetzt alles in layout() und layout() in den Konstruktor gepackt, sodass in meiner main() nur noch folgendes steht
Java:
	public static void main(String [] args){
		Kalender kal = new Kalender();
	}
Java:
public Kalender(){
		layout();
		init();
	}
aber ich bekomm überall Fehler wo ich im layout() auf meine Getter zugreifen will (genauso wie davor auch darum hab ich alles dann einfach in die main() geschrieben gehabt). Zum Beipsiel in der Zeile
Java:
for(int tage = 0; tage < kal.getDays(); tage++){
Ist ja auch klar da kennt er das Objekt kal nicht. Soll ich im layout() vllt auch ein Kalender Objekt erstellen oder geht des auch anders:confused: Außerdem muss ich mich grad damit rum schlagen das mir die Tage passend zu den Wochentagen ausgegeben werden also 3 Dezember muss unter Montag stehen...

Ich hab jetzt einfach mal alles aus der init() in eine Methode Namens Layout geschmissen aber was hab ich davon macht es des ganze nicht komplizierter? Oder wie meinst du des mit dem auslagern der Layout Objekte?

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hab gerade nicht so viel Zeit:
Java:
package de.tutorials;

import java.awt.Container;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Kalender extends JFrame {

	private GregorianCalendar calendar = new GregorianCalendar();
	private JTextField tf_jahr = new JTextField();
	private JTextField tf_monat = new JTextField();
	private int w_zähler = 1;
	private int pos_x = 0;
	private int pos_y = 0;
	private int bt_breite = 60;

	public Kalender() {
		super("Kalender");
		init();
	}

	private void init() {
		tf_jahr.setEditable(false);
		tf_jahr.setHorizontalAlignment(JTextField.CENTER);
		tf_jahr.setText(String.valueOf(getYear()));

		tf_monat.setEditable(false);
		tf_monat.setHorizontalAlignment(JTextField.CENTER);
		tf_monat.setText(getMonth());

		// Buttons zum aussuchen des Jahres
		JButton j_weiter = new JButton("-->");
		JButton j_zurück = new JButton("<--");

		// Buttons zum aussuchen des Monats
		JButton m_weiter = new JButton("-->");
		JButton m_zurück = new JButton("<--");

		Container c = getContentPane();
		c.setLayout(null);

		j_zurück.setBounds(10, 10, 60, 20);
		tf_jahr.setBounds(80, 10, 80, 20);
		j_weiter.setBounds(170, 10, 60, 20);

		m_zurück.setBounds(300, 10, 60, 20);
		tf_monat.setBounds(370, 10, 80, 20);
		m_weiter.setBounds(460, 10, 60, 20);

		JButton bt_tag[] = new JButton[31];

		pos_x = 90;
		pos_y = 80;

		// Buttons für die Tage des Monats
		for (int tage = 0; tage < getDays(); tage++) {
			bt_tag[tage] = new JButton();
			bt_tag[tage].setText(String.valueOf(tage + 1));
			bt_tag[tage].setBounds(pos_x, pos_y, bt_breite, 50);
			c.add(bt_tag[tage]);
			pos_x += 65;

			if (tage % 7 == 6) {
				w_zähler += 1;
				pos_y += 55;
				pos_x = 90;
			}
		}

		JButton bt_woche[] = new JButton[5];

		pos_x = 10;
		pos_y = 80;

		// Buttons für die Woche des Jahres
		for (int wochen = 0; wochen < w_zähler; wochen++) {
			bt_woche[wochen] = new JButton();
			bt_woche[wochen].setText(String.valueOf("#" + getWeek()));
			bt_woche[wochen].setBounds(pos_x, pos_y, bt_breite, 50);
			c.add(bt_woche[wochen]);
			pos_y += 55;
		}

		c.add(j_zurück);
		c.add(j_weiter);
		c.add(tf_jahr);
		c.add(m_zurück);
		c.add(m_weiter);
		c.add(tf_monat);

	}

	// Getter fürs Jahr
	public int getYear() {
		return calendar.get(Calendar.YEAR);
	}

	// Getter des Monats mit Sprach-Formatierung
	public String getMonth() {
		return calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale
				.getDefault());
	}

	// Getter für die Tage des Monats
	public int getDays() {
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	// Getter für den ersten Tag des Monats
	public int getFirstDay() {
		return calendar.getFirstDayOfWeek();
	}

	// Getter für die Woche im Jahr
	public int getWeek() {
		return calendar.get(Calendar.WEEK_OF_YEAR);
	}

	public static void main(String[] args) {
		Kalender kal = new Kalender();

		kal.setSize(550, 500);
		kal.setVisible(true);
	}
}

So sollte es nun eigentlich bei dir aussehen.
 
Hi,

ich hätte da noch ne Frage des Layout steht ja jetzt so weit. Ich habe über die Tage Mo - So gesetzt und Links vor jede Woche noch die Woche des Jahres gesetzt. Nun wollte ich Fragen wie du die Buttons den Tagen zugeordnet hast weil wenn ich sage
Java:
calendar.getFirstDayOfWeek();
bekomme ich nur ne '2' zurück und damit kann ich nichts anfangen :confused: ich wollte eigentlich Abfragen womit der Monat beginnt und dann die x-Koordinate des ersten Buttons setzten, also unter den jeweiligen Tag und immer wenn eine bestimmte x-Koordinate erreicht ist fang ich ne neue Zeile an. Wie findest du die Idee? und für die Woche hab ich mir noch nix überlegt gehabt :confused:

MfG
Saban
 

Anhänge

  • Kalender.jpg
    Kalender.jpg
    30,9 KB · Aufrufe: 35
Zuletzt bearbeitet von einem Moderator:
Das lässt sich sehen, der Anwender wird sich bestimmt freuen über ein so durchdachtes Programm.

Ich würde das Jahr und den Monat vertauschen. Schließich ist der Monat wichtiger als das Datum! Das zumindest sagt mein Bauch.
 
Zuletzt bearbeitet:
Ich habe über die Tage Mo - So gesetzt und Links vor jede Woche noch die Woche des Jahres gesetzt. Nun wollte ich Fragen wie du die Buttons den Tagen zugeordnet hast weil wenn ich sage
Java:
calendar.getFirstDayOfWeek();
bekomme ich nur ne '2' zurück und damit kann ich nichts anfangen :confused:

Dann schau doch in der Doku noch was es bedeutet wenn du eine 2 zurückbekommst: http://java.sun.com/javase/6/docs/api/

Du musst dann den ersten Tag des Monats entsprechend damit vergleichen und danach die erste X Koordinate setzen.

Mit den Wochen ist das auch sehr einfach: Immer wenn du mit ner neuen Zeile anfängst fragst du vom aktuellen Datum über den Kalender die Woche des Jahrs ab. Alles was in einer Zeile steht sollte ja in der selben Woche sein.
 
Zuletzt bearbeitet von einem Moderator:
Zurück