Java版世界时钟示例
這是一個Java版的世界時鐘示例,移植自Gerrit創建的同名Swing應用(http://www.jug-muenster.de/swing-worldclock-427 ),需要運行在JRE1.5或以上環境當中。
?
移植此示例主要是因為前一陣移植過Gerrit的swing原子鐘示例,所謂好事成雙,這個世界時鐘的示例自然不能放過(話說Gerrit為什么那么喜歡做時鐘?……),畢竟Java桌面應用實例本就不多,但凡有參考價值的還是要多做匯總才好。
?
另外,此示例中關于多時區的分辨與顯示部分,在非桌面應用中也具備一定的參考價值。
?
PS:由于此示例以LGame-Simple-0.2.5開發,所以也可以看作是世界時鐘的AWT實現。
?
下載地址(源碼在jar中):http://loon-simple.googlecode.com/files/WorldClock.7z
?
運行代碼如下所示(構建過程省略了Swing原版的一些步驟):
?
package org.loon.test; import java.awt.Graphics2D; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import org.loon.framework.game.simple.GameScene; import org.loon.framework.game.simple.core.graphics.Deploy; import org.loon.framework.game.simple.core.graphics.Screen; import org.loon.framework.game.simple.utils.GraphicsUtils; /** * Copyright 2008 - 2009 * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * * @project loonframework * @author chenpeng * @email:ceponline@yahoo.com.cn * @version 0.1 */ public class Main extends Screen { // 此示例移植自http://www.jug-muenster.de/swing-worldclock-427/同名應用 public Main() { // 設置窗體背景 this.setBackground(createBackgroundImage()); // 創建時間精靈 AnalogClock clock1 = new AnalogClock(City.Beijing, 25, 18, 74, 74); AnalogClock clock2 = new AnalogClock(City.NewYork, 25, 108, 74, 74); AnalogClock clock3 = new AnalogClock(City.SanFrancisco, 25, 198, 74, 74); AnalogClock clock4 = new AnalogClock(City.Dakka, 25, 288, 74, 74); // 添加精靈 this.add(clock1); this.add(clock2); this.add(clock3); this.add(clock4); } public void draw(Graphics2D g) { } /** * 創建背景圖案 * * @return */ private BufferedImage createBackgroundImage() { final java.awt.image.BufferedImage IMAGE = GraphicsUtils.createImage( getWidth(), getHeight(), java.awt.Transparency.TRANSLUCENT); java.awt.Graphics2D g2 = IMAGE.createGraphics(); g2.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON); java.awt.geom.Point2D BACKGROUND_START = new java.awt.geom.Point2D.Double( 0, 0); java.awt.geom.Point2D BACKGROUND_STOP = new java.awt.geom.Point2D.Double( 0, getHeight()); final float[] BACKGROUND_FRACTIONS = { 0.0f, 1.0f }; final java.awt.Color[] BACKGROUND_COLORS = { new java.awt.Color(0x505652), new java.awt.Color(0x393E3A) }; final java.awt.Shape BACKGROUND = new java.awt.geom.RoundRectangle2D.Double( 0, 0, getWidth(), getHeight(), 5, 5); final java.awt.LinearGradientPaint BACKGROUND_GRADIENT = new java.awt.LinearGradientPaint( BACKGROUND_START, BACKGROUND_STOP, BACKGROUND_FRACTIONS, BACKGROUND_COLORS); g2.setPaint(BACKGROUND_GRADIENT); g2.fill(BACKGROUND); java.awt.geom.Point2D INNER_BACKGROUND_START = new java.awt.geom.Point2D.Double( 0, 10); java.awt.geom.Point2D INNER_BACKGROUND_STOP = new java.awt.geom.Point2D.Double( 0, getHeight() - 10); final float[] INNER_BACKGROUND_FRACTIONS = { 0.0f, 1.0f }; final java.awt.Color[] INNER_BACKGROUND_COLORS = { new java.awt.Color(0x4D5651), new java.awt.Color(0x393E3A) }; final java.awt.Shape INNER_BACKGROUND = new java.awt.geom.RoundRectangle2D.Double( 10, 10, getWidth() - 20, getHeight() - 20, 5, 5); final java.awt.LinearGradientPaint INNER_BACKGROUND_GRADIENT = new java.awt.LinearGradientPaint( INNER_BACKGROUND_START, INNER_BACKGROUND_STOP, INNER_BACKGROUND_FRACTIONS, INNER_BACKGROUND_COLORS); g2.setPaint(INNER_BACKGROUND_GRADIENT); g2.fill(INNER_BACKGROUND); g2.setColor(new java.awt.Color(0x2F362E)); g2.drawLine(10, 10, 10, getHeight() - 10); g2.drawLine(getWidth() - 10, 10, getWidth() - 10, getHeight() - 10); g2.drawLine(10, 10, getWidth() - 10, 10); g2.setColor(new java.awt.Color(0x6B7167)); g2.drawLine(10, getHeight() - 10, getWidth() - 10, getHeight() - 10); g2.dispose(); return IMAGE; } public void leftClick(MouseEvent e) { } public void middleClick(MouseEvent e) { } public void rightClick(MouseEvent e) { } public void onKey(KeyEvent e) { } public void onKeyUp(KeyEvent e) { } public static void main(String[] args) { GameScene frame = new GameScene("Java版世界時鐘", 398, 391); Deploy deploy = frame.getDeploy(); deploy.setScreen(new Main()); deploy.setShowFPS(true); deploy.setLogo(false); deploy.setFPS(100); deploy.mainLoop(); frame.showFrame(); } }
以下為運行效果:
?
?
?
?
下載地址(源碼在jar中) :http://loon-simple.googlecode.com/files/WorldClock.7z
posted on 2010-02-22 21:17 cping 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/cping1982/archive/2010/02/22/2257840.html
總結
以上是生活随笔為你收集整理的Java版世界时钟示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Remoting方面的转帖1
- 下一篇: Java时断时续之——正则表达式