# JSpinner Date Editor Frage



## swas (19. April 2010)

Hallo Leute,
ich wollte mir einen JSpinner mit Datum/Uhrzeit als veränderbaren Wert erzeugen. Das ist mir auch gelungen. Mir gefiel aber nicht, dass der Spinner nur den Wert, der am weitesten Links steht, ändert. Ich hab mich einwenig im Internet schlau gemacht und in einem anderen Forum zwei Lösungen gefunden. Eine Lösung ist es dem SpinnerDateModel Konstruktor das Feld mitzugeben das man ändern möchte z.B.:

```
JSpinner spinner = new JSpinner(new SpinnerDateModel(new Date(),
				null, null, Calendar.YEAR));
```
Das klappt leider nicht. Egal was man bei dem vierten Parameter eingibt wird immer der Wert auf der linken Seite geändert.

Die Zweite Lösung ist die folgende (ich möchte die Minuten ändern):

```
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;


public class SpinnerTest extends JFrame {

	public SpinnerTest() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(new Dimension(200,200));
		setLocationRelativeTo(null);
		
		final JSpinner spinner = new JSpinner(new SpinnerDateModel(new Date(),
				null, null, Calendar.YEAR));
		spinner.setEditor(new JSpinner.DateEditor(spinner,
				"hh:mm:ss dd.MM.yyyy"));
		getContentPane().add(spinner);

		ActionListener al = new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				((JSpinner.DefaultEditor) spinner.getEditor()).getTextField()
						.setCaretPosition(3);
			}
		};
		javax.swing.Timer timer = new javax.swing.Timer(1000, al);
		timer.setRepeats(false);
		timer.start();
		pack();
		
	}
	
	
	public static void main(String[] args) {
		new SpinnerTest().setVisible(true);
	}

}
```
Die Lösung funktioniert zwar aber ich hab irgendwie ein mulmiges Gefühl dabei, da mir dies nicht "elegant" bzw. "sauber" scheint.
Was meint ihr dazu?
Das Forum mit den Lösungen ist hier.

mfg,


----------



## Matt297 (29. April 2010)

Hi, ich kann dir jetzt zwar keine genaue Antwort auf dein Problem geben, aber ich kann dir eine gute alternative bieten.

Auf Toedter: JCalender/JDateChooser findest du einige zusätzliche Elemente, die dir das arbeiten mit Dati erleichtern.
Es ist zwar löblich wenn man alles selbst machen möchte und so, aber vor allem in größeren Projekten spart man sich viel zeit und aufwand. Ich weiß ja nicht wie das bei dir ist, aber so einen Date-Spinner braucht man selten so standalone.
Auf jeden Fall nutze ich diese Komponenten auch in einem Projekt an einer Stelle auch den JDateSpinner und hatte eigentlich keine Probleme damit.
Ich hoffe ich kann dir helfen.

P.S.: Als ich eben versucht hab die Seite zu öffnen, konnte ich keine Verbindung herstellen, aber vor wenigen Tagen konnte ich es noch, daher vermute ich, dass es nur eine temporäre Störung ist.


----------



## Vereth (30. April 2010)

Diese Lib ist ziemlich nützlich, aber für deine Zwecke brauchst du sie nicht mal. Ich habe im Web den Artikel Separating Date and Time in a JSpinner gefunden, mit dessen Hilfe du das auch leicht mit Swing-Komponenten realisieren kannst. Der Code auf der Website erscheint ziemlich konfus, aber der Download ist sehr nützlich.
Du musst das Caret (den Text-Cursor) auf den Abschnitt positionieren, den du ändern möchtest. Du kannst aber auch die ganze Info von Hand eingeben. Interessanterweise wird dabei z.B. der 32.1. auf den 1.2. korrigiert.


----------

