黑馬程式員Android視頻教程_前言黑馬程式員Android視頻教程_搭建Android開發環境黑馬程式員Android視頻教程_建立與啟動手機模擬器和學習使用ANDROID作業系統黑馬程式員Android視頻教程_開發與運行(卸載)第一個ANDROID應用黑馬程式員Android視頻教程_項目的目錄結構與安裝及啟動過程分析黑馬程式員Android視頻教程_電話拔號器黑馬程式員Android視頻教程_查看應用輸出的錯誤資訊與如何部署應用到真實手機黑馬程式員Android視頻教程_簡訊發送器黑馬程式員Android視頻教程_深入瞭解各種布局技術黑馬程式員Android視頻教程_對應用進行單元測試黑馬程式員Android視頻教程_查看與輸出日誌資訊黑馬程式員Android視頻教程_檔案的儲存與讀取黑馬程式員Android視頻教程_檔案的操作模式黑馬程式員Android視頻教程_把檔案存放在SDCard黑馬程式員Android視頻教程_採用Pull解析器解析和產生XML內容黑馬程式員Android視頻教程_採用SharedPreferences儲存使用者喜好設定參數黑馬程式員Android視頻教程_建立資料庫與完成資料添刪改查黑馬程式員Android視頻教程_在SQLite中使用事務黑馬程式員Android視頻教程_採用ListView實現資料列表顯示黑馬程式員Android視頻教程_採用ContentProvider對外共用資料黑馬程式員Android視頻教程_監聽ContentProvider中資料的變化黑馬程式員Android視頻教程_訪問通訊錄中的連絡人和新增連絡人...黑馬程式員Android視頻教程_網路通訊之網狀圖片查看器黑馬程式員Android視頻教程_網路通訊之網頁源碼查看器黑馬程式員Android視頻教程_網路通訊之資訊用戶端黑馬程式員Android視頻教程_採用JSON格式返回資料給資訊用戶端黑馬程式員Android視頻教程_網路通訊之通過GET和POST方式提交參數給web應用黑馬程式員Android視頻教程_網路通訊之通過HTTP協議實現檔案上傳黑馬程式員Android視頻教程_發送xml資料和調用webservice黑馬程式員Android視頻教程_多線程下載原理黑馬程式員Android視頻教程_多線程斷點下載器黑馬程式員Android視頻教程_檔案斷點上傳器黑馬程式員Android視頻教程_為應用添加多個Activity與參數傳遞黑馬程式員Android視頻教程_Activity的啟動模式黑馬程式員Android視頻教程_Intent深入解剖黑馬程式員Android視頻教程_Activity生命週期黑馬程式員Android視頻教程_採用廣播接收者實現簡訊qie聽器黑馬程式員Android視頻教程_採用廣播接收者攔截外拔電話及其特性黑馬程式員Android視頻教程_採用Service實現電話qie聽器黑馬程式員Android視頻教程_建立能與訪問者進行相互連信的本地服務黑馬程式員Android視頻教程_使用AIDL實現進程通訊黑馬程式員Android視頻教程_服務的生命週期黑馬程式員Android視頻教程_音樂播放器黑馬程式員Android視頻教程_線上視頻播放器黑馬程式員Android視頻教程_拍照黑馬程式員Android視頻教程_視頻燒錄黑馬程式員Android視頻教程_手勢識別黑馬程式員Android視頻教程_實現軟體國際化黑馬程式員Android視頻教程_螢幕適配黑馬程式員Android視頻教程_樣式與主題黑馬程式員Android視頻教程_編碼實現軟體介面黑馬程式員Android視頻教程_發送狀態列通知黑馬程式員Android視頻教程_採用網頁設計軟體介面黑馬程式員Android視頻教程_tween動畫黑馬程式員Android視頻教程_frame動畫的實現黑馬程式員Android視頻教程_activity切換動畫與頁面切換動畫黑馬程式員Android視頻教程_採用方向感應器實現指南針
http://edu.csdn.net/heima/heimaline.html
package com.wiworld.thinkingjava.worldclock;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import java.util.Date;
import java.util.TimeZone;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import sun.awt.HorizBagLayout;
public class ClockFrame extends JFrame {
private static final int WIDTH = 600;
private static final int HEIGHT = 600;
final JPanel panel = new JPanel();
private static final String places[] = {"E1","E2","E3","E4","E5","E6","E7","E8","E9","E10","E11","E12",
"W12","W11","W10","W9","W8","W7","W6","W5","W4","W3","W2","W1"};
private boolean bolFirstDraw = true;
public ClockFrame() {
initData();
Container contentContainer = getContentPane();
panel.setBackground(new Color(0x909090));
contentContainer.add(panel, BorderLayout.CENTER);
JButton startButton = new JButton(" Start Draw ");
contentContainer.add(startButton, BorderLayout.SOUTH);
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
bolFirstDraw = true;
initData();
new Thread(){
public void run() {
while(true/*index<TIMES*/){
try {
Thread.sleep(1000);
bolFirstDraw = true;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
draw(panel.getGraphics());
// index++;
}
}
}.start();
}
});
setSize(WIDTH, HEIGHT+100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private void initData(){
}
public void draw(Graphics g) {
if(g==null){
System.out.println("Panel.paint.Graphics is null ");
return;
}
// if(bolFirstDraw){
// g.clipRect(0,0,WIDTH, HEIGHT);
// g.clearRect(0,0,WIDTH,HEIGHT);
// g.setColor(new Color(0x909090));
// g.fillRect(0, 0, WIDTH, HEIGHT);
// }
//draw chess base
if(bolFirstDraw){
bolFirstDraw = false;
int startX = 50;
int startY = 50;
int clockW = 500;
int clockH = 500;
int arcAngle = 360;
int size = 24;
int startOffset = 50;
int clockOffset = -startOffset*2;
int sectionAngle = arcAngle/size;
Date today = new Date();
int hour = today.getHours();
int min = today.getMinutes();
int second = today.getSeconds();
int timeZone = today.getTimezoneOffset()/60;
int currentTimeAngle = timeZone*360/24 + hour*360/24+ min*sectionAngle/60;
//draw time zone
for(int i=0;i<size;i++){
if(i%2==0){
g.setColor(Color.black);
}else{
g.setColor(Color.white);
}
g.fillArc(startX, startY, clockW, clockH, i*sectionAngle,sectionAngle);
}
//draw world zone
for(int i=0;i<size;i++){
if(i%2==0){
g.setColor(Color.red);
}else{
g.setColor(Color.blue);
}
g.fillArc(startX+startOffset, startY+startOffset, clockW+clockOffset, clockH+clockOffset, i*sectionAngle+currentTimeAngle, sectionAngle);
}
//draw 24 time
for(int i=0;i<size;i++){
g.setColor(Color.green);
g.drawString(""+(i+1), (int) (startX+clockW/2+clockW/2*Math.sin(i*sectionAngle*Math.PI/180)), (int) (startY+clockH/2+clockH/2*Math.cos(i*sectionAngle*Math.PI/180) ));
}
//draw 24 place
for(int i=0;i<size;i++){
g.setColor(Color.pink);
g.drawString(places[i], (int) (startX+startOffset+(clockW+clockOffset)/2+(clockW+clockOffset)/2*Math.sin((i*sectionAngle+currentTimeAngle)*Math.PI/180)), (int) (startY+startOffset+(clockH+clockOffset)/2+(clockH+clockOffset)/2*Math.cos((i*sectionAngle+currentTimeAngle)*Math.PI/180) ));
}
g.setColor(Color.yellow);
// g.fillArc(startX+startOffset, startY+startOffset, clockW+clockOffset, clockH+clockOffset, second*6, 1);
g.drawLine(startX+startOffset+(clockW+clockOffset)/2,startY+startOffset+(clockH+clockOffset)/2, (int) (startX+startOffset+(clockW+clockOffset)/2+(clockW+clockOffset)/2*Math.sin((-second*6)*Math.PI/180)), (int) (startY+startOffset+(clockH+clockOffset)/2+(clockH+clockOffset)/2*Math.cos((-second*6)*Math.PI/180) ));
}
g.clipRect(0,0,WIDTH, HEIGHT);
}
private int getRandomX() {
return (int) (Math.random() * WIDTH);
}
private int getRandomY() {
return (int) (Math.random() * HEIGHT);
}
private int getRandomWidth() {
return (int) (Math.random() * (WIDTH / 7));
}
private int getRandomHeight() {
return (int) (Math.random() * (HEIGHT / 7));
}
public static void main(String[] args) {
ClockFrame client = new ClockFrame();
}
}