Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13006
| From | "Christian H. Kuhn" <qno-news@qno.de> |
|---|---|
| Newsgroups | de.comp.lang.java |
| Subject | Re: Countdown Timer Design |
| Date | 2016-07-17 12:44 +0200 |
| Message-ID | <dv15t5Fgp04U1@mid.individual.net> (permalink) |
| References | (3 earlier) <nmbfkk$sk4$1@newsreader4.netcologne.de> <dut1paFhuo8U1@mid.individual.net> <nmblfr$1ek$1@newsreader4.netcologne.de> <duvo7iF6tgdU1@mid.individual.net> <Schachuhr-20160717014148@ram.dialup.fu-berlin.de> |
Am 17.07.2016 um 03:01 schrieb Stefan Ram:
> "Christian H. Kuhn" <qno-news@qno.de> writes:
> Ich würde das vielleicht so machen (habe aber im Moment keine Zeit,
> es wirklich zu schreiben):
Ein interessantes, weil sehr einfaches Design. Anmerkungen:
> public void start( final long point )
> { if( this.isRunning )throw new java.lang.IllegalStateException();
Hier und bei end() ist die Exception wohl nicht nötig. Wenn der Knopf
von außen mehrfach gedrückt wird – und das kommt in der Praxis durchaus
vor – ist es unnötig, da nochmal ausdrücklich darauf hinzuweisen. Es
passiert einfach nichts. Eine watch clause if (this.isRunning) {return}
oder andersrum if (!this.isRunning) { Body } reicht völlig.
> public long duration( final long point )
> { return this.duration +
> ( this.isRunning ? point - this.startTime : 0 ); }}
Wird nicht unbedingt funktionieren. Funktioniert dann, wenn die
Oberklasse „oft genug“ aktualisiert und bei 0 die gespeicherte duration
weiter verwenden kann. Das kann aber nicht garantiert werden, wenn
zwischen zwei Aktualisierungen längere Zeit liegt, die zuerst laufende
Uhr inzwischen angehalten wurde und mehr Zeit vergangen ist als die
kleinste im Display dargestellte Zeiteinheit.
> Beim Aufbauen der Swing-Oberfläche wird ohnehin
> invokeAndWait verwendet (S), alle anderen Ereignisse sollten
> von Swing kommen und damit schon auf dem EDT laufen.
Für QChessTimer und QChessClock keine valide Annahme. Hier soll ein
unabhängiges Modell entworfen werden, auf das beliebige Oberflächen
aufgesetzt werden können, von der Kommandozeile und Tastendrücken über
Swing und JavaFX bis hin zu Weboberflächen, bei denen Uhr und beide
Spieler auf drei verschiedenen Systemen arbeiten.
> S: Es wird mit »clock = new Clock()« eine neue Uhr erzeugt
> (ich nehme zur Vereinfachung nur eine Uhr an).
>
> A: Es wird »clock.start( now() )« aufgerufen, wobei »now()«
> die aktuelle Zeit in (beispielsweise) Nanosekunden ist.
>
> O: Es wird »clock.end( now() )« aufgerufen.
Das übernimmt im Modell QChessClock und wird von der Oberfläche
irgendwie gesteuern.
> R: Ich nehme an, daß Android und Swing es erlauben, sich
> regelmäßig Timer-Ereignisse schicken zu lassen, am besten
> synchronisiert mit der Bildschirmauffrischung und diese auch
> gleich auf dem EDT laufen.
Muss wie gesagt in Java passieren, weil die Technologie der Oberfläche
an dieser Stelle unbekannt ist.
> Dann wird mit »clock.duration( now() )«
> die aktuelle Zeit der Uhr abgefragt und angezeigt.
Ah. DAS ist die Rettung :-) Wenn man beim Abfragen die Zeit mit
übergibt, kann man auf jeden Fall die verbleibende Zeit zurückgeben,
egal ob running oder stopped. Und QChessTimer braucht keine Zeitquelle mehr.
> Ich würde allerdings gerade bei einem »Lernprojekt« dann
> auch JavaFX verwenden, da man ja für die Zukunft lernen will
> und nicht für die Vergangenheit.
Werde ich mir anschauen. Der recht knappe deutsche Wikipedia-Artikel
behauptet, JavaFX sei für Rich Internet Applications zuständig. Zur Zeit
nicht mein Thema, kann aber noch kommen. Und auch wenn eine Web-GUI
möglich sein soll, geht es mir doch erstmal um lokale Anwendungen. Daher
Swing zum Lernen, Android für die Produktion.
Der umfangreichere englische Artikel erklärt JavaFX aber auch für
Desktop Applications zuständig. Das erklärt auch, warum JavaFX Swing
ablösen soll; das ist in der dt. Fassung zwar formuliert, klingt da aber
unlogisch. Ich werde mir JavaFX auf jeden Fall anschauen, und vermutlich
probiere ich dann auch eine GUI für QChessClock. Aber erst nach Android.
lg
QNo
Back to de.comp.lang.java | Previous | Next — Previous in thread | Next in thread | Find similar
JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-14 01:09 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-14 18:26 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-14 19:47 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 00:08 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 22:04 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 22:53 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 23:09 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 23:44 +0200
Countdown Timer Design (was: JUnit Test von JButton: Action wird nicht erkannt) "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 23:44 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 12:44 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 15:49 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 17:03 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 15:59 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 14:59 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 16:06 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-19 18:59 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 22:35 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-20 13:00 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-23 20:36 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-23 23:15 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Wanja Gayk <brixomatic@yahoo.com> - 2016-07-19 23:02 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-20 12:33 +0200
GUI-Update über Swing-EDT (was: JUnit Test von JButton: Action wird nicht erkannt) "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 12:03 +0200
Re: GUI-Update über Swing-EDT Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 22:43 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 23:18 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 15:24 +0200
Re: GUI-Update über Swing-EDT Patrick Roemer <sangamon@netcologne.de> - 2016-07-16 16:42 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 23:05 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 16:02 +0200
csiph-web