JSpinner nur Zeitangabe

Status
Nicht offen für weitere Antworten.

Tom299

Bekanntes Mitglied
hallo,

ich hab ein problem mit dem JSpinner, worüber andere sicher auch schon mal gestolpert sind. und zwar möchte ich NUR die zeit im spinner anzeigen (HH:mm) und beim klicken sollen entsprechend die stunden oder minuten hoch oder runtergezählt werden.

das funktioniert auch soweit, AUSSER wenn ich einen start-wert mitgebe, dann macht der spinner gar nichts mehr. kann mir jemand auf die sprünge helfen? ich habs noch nicht kapiert, warum der JSpinner sich so verhält ...


hier testcode, wo man das problem gleich selbst nachvollziehen kann. der linke spinner funktioniert (er hat keinen start-wert), der rechts funktioniert nicht (start-wert vorhanden).


Code:
import java.awt.BorderLayout;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

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


public class TestSpinner extends JFrame {
        
    public TestSpinner() {
      GregorianCalendar calendar = new GregorianCalendar();
      Date now = calendar.getTime();
   
      SpinnerDateModel timeModelOK = new SpinnerDateModel(
          now, 
          null, 
          null, 
          Calendar.HOUR_OF_DAY);
      
      JSpinner timeSpinnerOK = new JSpinner(timeModelOK);
      timeSpinnerOK.setEditor (new JSpinner.DateEditor(timeSpinnerOK, "HH:mm"));

      SpinnerDateModel timeModelERROR = new SpinnerDateModel(
          now, 
          now, // start gesetzt, sonst nichts!!!
          null, 
          Calendar.HOUR_OF_DAY);
      
      JSpinner timeSpinnerERROR = new JSpinner(timeModelERROR);
      timeSpinnerERROR.setEditor (new JSpinner.DateEditor(timeSpinnerERROR, "HH:mm"));
      
      JPanel panel = new JPanel();
      panel.add(timeSpinnerOK);
      panel.add(timeSpinnerERROR);
      getContentPane().add(panel, BorderLayout.CENTER);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setSize(300,200);
      setLocation(400,100);
      setVisible(true);
    }
   
    public static void main(String[] args) {
      new TestSpinner();
    }          
}
 

The_S

Top Contributor
ohne deinen Code jetzt gelesen zu haben, copy & paste ich mal was von einem Projekt von mir, wo ich auch sowas mache

Code:
		azeitvon = new JSpinner(new SpinnerDateModel());
		azeitvon.setEditor(new JSpinner.DateEditor(azeitvon, "HH:mm"));
		azeitvon.setValue(new GregorianCalendar(1971, 0, 1, 6, 0).getTime());

hilfts?
 

Tom299

Bekanntes Mitglied
nee, setValue funktioniert ja, nur hab ich den wert gleich im konstruktor mitgegeben.

gib deinem spinner mal noch ein .setStart mit, dann wirste sehen was passiert ;-)
 

Tom299

Bekanntes Mitglied
hmm, also bei mir macht der rechte spinner nichts, weil er intern immer auf dem tages-feld vom datum steht und nicht zur stunde springt. wenn ich den format-string mit komplettem datum hinzufüge klappts ja auch.

ich hab java 1.5 vielleicht liegts noch daran???
 

The_S

Top Contributor
Achso, das hatte ich nicht ausprobiert. Stimmt, da tut sich nichts - was aber auch richtig so ist. Warum übergibst du überhaupt deinem Model ein Date-Objekt, wenn ein Comparable erwartet wird? Und erstere Variante funktioniert ja, ich versteh dein Problem irgendwie nicht
 

Tom299

Bekanntes Mitglied
mit start und end kann man halt minimum und maximum festlegen. es wird ein comparable erwartet, date ist ein comparable und im normalfall wird wohl immer ein date übergeben.

ich hab in meinem programm 2 datenfelder, beginn und ende. ende darf nicht vor beginn liegen, deswegen will ich beim ende-feld einfach ein min-wert einstellen, quasi 1 min höher als die zeit vom beginn-feld. und das kann man beim jspinner mit diesen start- und end-comparables machen. dann hab ich weniger prüf-logik drin, weil einem der spinner ja schon einiges abnimmt.

verstehste? ;-)
 

The_S

Top Contributor
ja, aber wenn das min-date zugewiesen ist, und das max-date gleich null ist, dann darfst du dich auch nicht wundern, dass er nur das min-date zulässt.
 

Tom299

Bekanntes Mitglied
ähm ich glaub wir reden aneinander vorbei, weil das versteh ich jetzt nicht so richtig, was du meinst.

ich erklärs nochmal etwas ausführlicher und hoffentlich verständlicher:
ich hab 2 JSpinner, einer für Beginn-Zeit und eine für Ende-Zeit.
der Beginn-Spinner hat weder min-date noch max-date, weil das beginn-datum frei wählbar ist.
der Ende-Spinner hat ein min-date, was vom Beginn-Spinner abhängig ist und dann halt 1 min später liegt. max-date hat der Ende-Spinner aber nicht, macht ja keinen sinn.

vielleicht sollte ich noch dazusagen, daß es neben den Zeit-Spinner noch dahiner ein Date-Feld mit dem Datum gibt, je eins für Beginn und Ende.

und wenn ich jetzt als Beginn z.b. 10:00h am 27.03.08 einstelle, dann soll das min-datum beim Ende-Spinner auf 10:01h stehen, denn das Ende kann nicht gleich oder kleiner als der Beginn sein.


das problem ist einfach, wenn ich dem spinner dieses start-comparable mitgebe (hier als date, time gibts ja leider nicht) und ich benutze den format-string (HH:mm), daß der spinner dann nichts macht, wenn ich in anklicke (next- oder previous-button).
 

The_S

Top Contributor
Doch doch, ich verstehe dich schon. Bau mal das in deinen Code, dann verstehst du wo das Problem liegt ;) :

Code:
      timeSpinnerOK.addChangeListener(new ChangeListener() {

		public void stateChanged(ChangeEvent arg0) {
			System.out.println(now.getTime() + "/" + ((Date)(timeSpinnerOK.getValue())).getTime());
		}
      });

now und timeSpinnerOK muss natürlich dann final sein.
 

Tom299

Bekanntes Mitglied
hmm, ich habs im OK und im ERROR spinner eingebaut. im ok geht er natürlich rein und der hat als datum im spinner Thu Jan 01 10:24:00 CET 1970, now steht auf Thu Mar 27 10:24:38 CET 2008.

aber das bringt mich jetzt noch nicht weiter. bau es mal im error-spinner ein, der verweigert nämlich nach wie vor seinen dienst, wenn man auf die buttons klickt kommt nur ein piepton vom rechner und der spinner macht weiterhin nichts und geht auch nicht in den listener rein. hier liegt ja mein problem, weil hier dieses start-date gesetzt ist, im ok ist ja start auf null ...
 

The_S

Top Contributor
OK, dann ausführlicher ^^

Wenn start und end-Date auf null steht, darf ja alles gesetzt werden. Wenn es gesetzt wird, dürfen nur Daten ausgewählt werden, die zwischen den beiden Dates stehen. Soweit klar, oder!?

Wie du jetzt aber bei der Ausgabe siehst, wird im JSpinner (da du nur Stunde und Minute anzeigst) das aktuelle Datum, also die value auf die Eingabe am 1.1.1970 gesetzt. Und der 1.1.1970 um z. B. 10:42 liegt nunmal vor dem 27.3.2008 um 10:42, weshalb der JSpinner sich nicht mehr umändern lässt.

Lösungen:

- Du setzt als Comparable-Start-Date ein Datum mit aktueller Uhrzeit aber vom 1.1.1970
- Die compareTo Methode von Date überschreiben, so dass nur auf Stunden und Minuten verglichen wird
 

Tom299

Bekanntes Mitglied
jaaaaaaaaaa, endlich hab ich es geschnallt ;-)

vielen dank für die hilfe und die ausführliche erklärung, ich habs die ganze zeit nicht bemerkt daß er immer 01.01.1970 als datum nimmt und mein min-wert halt immer drüber lag ... ich frag mich nur wieso er intern auf 01.01.1970 steht wenn ich ihm doch ein komplettes datum gebe. aber ok, wenn ich dann als min-wert 01.01.1970 00:00 setze klappts. aber da soll mal einer schnell drauf kommen .....


danke nochmal :)


gruß tom

ps: glaub über dieses problem werden andere auch noch stolpern, weil es nicht so ersichtlich ist ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
C JSpinner AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
K Swing JSpinner mit NULL AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
D JCheckbox und JSpinner in JTable AWT, Swing, JavaFX & SWT 9
M JSpinner, setValue AWT, Swing, JavaFX & SWT 7
N Swing JSpinner mit Datum aber ohne Uhrzeit AWT, Swing, JavaFX & SWT 2
J Swing JSpinner mit zusätzlichem Text? AWT, Swing, JavaFX & SWT 2
B JSpinner ChangeEvent erzwingen AWT, Swing, JavaFX & SWT 6
B JSpinner Textgröße anpassen AWT, Swing, JavaFX & SWT 2
B JSpinner welche Taste? AWT, Swing, JavaFX & SWT 5
B JSpinner Enter AWT, Swing, JavaFX & SWT 7
G JSpinner ohne Tausendertrennzeichen AWT, Swing, JavaFX & SWT 5
N Wertanzeige mittels JSpinner AWT, Swing, JavaFX & SWT 3
S JSpinner AWT, Swing, JavaFX & SWT 11
G Swing JSpinner nur mit Buttons ändern AWT, Swing, JavaFX & SWT 8
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
T Swing JSpinner in JTable AWT, Swing, JavaFX & SWT 9
C Größe von JSpinner fixieren AWT, Swing, JavaFX & SWT 4
J JSpinner + SpinnerNumberModel int auslesen AWT, Swing, JavaFX & SWT 2
C Zwei JSpinner mit dem gleichen Wert AWT, Swing, JavaFX & SWT 2
Eldorado Swing Popup-Menü mit Jspinner AWT, Swing, JavaFX & SWT 4
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
M JSpinner Font ändern AWT, Swing, JavaFX & SWT 4
Spin JSpinner AWT, Swing, JavaFX & SWT 10
T JSpinner, 3 JSpinner aber nur ein SpinnerDateModel AWT, Swing, JavaFX & SWT 7
S JSpinner der Floats anzeigt..? AWT, Swing, JavaFX & SWT 4
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
elitebiber Swing JSpinner und die Zeit AWT, Swing, JavaFX & SWT 11
T JSpinner Problem AWT, Swing, JavaFX & SWT 6
G JSpinner umdrehen? AWT, Swing, JavaFX & SWT 2
G JSpinner und ChangeListener AWT, Swing, JavaFX & SWT 3
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
G JSpinner Frage AWT, Swing, JavaFX & SWT 2
H JSpinner mit Kalenderwoche und Jahr AWT, Swing, JavaFX & SWT 6
M JSpinner in einer JTable? AWT, Swing, JavaFX & SWT 5
P Frage zu JSpinner AWT, Swing, JavaFX & SWT 3
B JTextFiled, JCheckBox, JSpinner Eigenschaften speichern AWT, Swing, JavaFX & SWT 2
R Konvertieren von Werten im JSpinner AWT, Swing, JavaFX & SWT 2
K JSpinner Werte verschwinden bei Panel Wechsel AWT, Swing, JavaFX & SWT 2
B JSpinner passt optisch nicht zu anderen Komponenten AWT, Swing, JavaFX & SWT 2
D JSpinner ohne Edit Möglichkeit AWT, Swing, JavaFX & SWT 5
J JSpinner mit zahlen AWT, Swing, JavaFX & SWT 10
P JSpinner Objekt anstatt Zahlen sollen man Namen auswählen AWT, Swing, JavaFX & SWT 2
L JSpinner + addRow() AWT, Swing, JavaFX & SWT 3
M .txt unter Verwendung von JSpinner in Textfeld schreiben AWT, Swing, JavaFX & SWT 4
N JDK1.4- Überladen d. Methoden getValue setValue von JSpinner AWT, Swing, JavaFX & SWT 2
S JSpinner: Editieren einschränken AWT, Swing, JavaFX & SWT 4
F JSpinner FocusListener AWT, Swing, JavaFX & SWT 2
W JSpinner: Button vertikal anordnen AWT, Swing, JavaFX & SWT 2
R JSpinner rotieren AWT, Swing, JavaFX & SWT 6
A JSpinner in Dialogbox integrieren? AWT, Swing, JavaFX & SWT 3
D JSPinner Größe verändern - setSize() funktioniert nicht AWT, Swing, JavaFX & SWT 7
javasdann JSpinner & KeyListener. AWT, Swing, JavaFX & SWT 8
G jspinner schrittweite in Abhängigkeit vom aktuellen Wert AWT, Swing, JavaFX & SWT 3
G JSpinner bringt bei anklicken eine CastException AWT, Swing, JavaFX & SWT 5
flashfactor Un mal ein Problem mit JSpinner AWT, Swing, JavaFX & SWT 7
I jSpinner.getValue() AWT, Swing, JavaFX & SWT 2
G JSpinner für Datumsanzeige AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben