在 trace JTableHeader source code 時,怎麼都找不到有關處理 mouse event 的地方,看了半天也是不明所以。最後在 TableHeaderUI 裏才找到相關的 code,但是在 JTableHeader 找不到載入 TableHeaderUI 的地方。還好,看到了 netbaixc 所寫的"JAVA Painting-Swing实现纪要一",才明暸如何載入 TableHeaderUI。

  1. javax\swing\table\JTableHeader.java

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

DateFormat, SimpleDateFormat

主要是利用 SimpleDateFormat 來設定要顯示的樣式,再利用 DateFormat 的 format 函數來顯示字串。

字母 日期或時間元素 範例
G Era 標誌符 AD
y 1996; 96
M 年中的月份 July; Jul; 07
w 年中的周數 27
W 月份中的周數 2
D 年中的天數 189
d 月份中的天數 10
F 月份中的星期 2
E 星期中的天數 Tuesday; Tue
a Am/pm 標記 PM
H 一天中的小時數(0-23) 0
k 一天中的小時數(1-24) 24
K am/pm 中的小時數(0-11) 0
h am/pm 中的小時數(1-12) 12
m 小時中的分鐘數 30
s 分鐘中的秒數 55
S 毫秒數 978
z 時區 Pacific Standard Time;

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

Java datetime 顯示可以使用 java 內建的 DateFormat 及 SimpleDateFormat 來顯示自訂的字串;或是利用 Calendar get 函數取得年月日等數字,再配合 String 來顯示。

Calendar 類別 get 函數

  1. public int get(int field)
  2. 返回給定日曆欄位的值。
  3. ERA: 指示年代的欄位數字,比如羅馬儒略歷中的 AD 或 BC,中文的西元或西元前。
  4. YEAR: 指示年的欄位數字。
  5. MONTH: 指示月份的欄位數字。在格里高里歷和羅馬儒略歷中一年中的第一個月是 JANUARY,它為 0;最後一個月取決於一年中的月份數。
  6. DAY_OF_MONTH: 指示一個月中某天的欄位數字,一個月中第一天的值為 1。
  7. DAY_OF_WEEK: 指示一個星期中的某天的欄位數字。該欄位可取的值為 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY。
  8. AM_PM: 欄位數字,指示 HOUR 是在中午之前還是在中午之後。例如,在 10:04:15.250 PM 這一時刻,AM_PM 為 PM。
  9. HOUR: 欄位數字,指示上午或下午的小時。HOUR 用於 12 小時制時鐘 (0 - 11)。中午和午夜用 0 表示,不用 12 表示。例如,在 10:04:15.250 PM 這一時刻,HOUR 為 10。
  10. HOUR_OF_DAY: 欄位數字,指示一天中的小時。HOUR_OF_DAY 用於 24 小時制時鐘。例如,在 10:04:15.250 PM 這一時刻,HOUR_OF_DAY 為 22。
  11. MINUTE: 欄位數字,指示一小時中的分鐘。例如,在 10:04:15.250 PM 這一時刻,MINUTE 為 4。
  12. SECOND: 欄位數字,指示一分鐘中的秒。例如,在 10:04:15.250 PM 這一時刻,SECOND 為 15。
  13. MILLISECOND: 欄位數字,指示一秒中的毫秒。例如,在 10:04:15.250 PM 這一時刻,MILLISECOND 為 250。
  14. WEEK_OF_YEAR: 欄位數字,指示當前年中的星期數,一年中第一個星期的值為 1。
Calendar date=Calendar.getInstance();
String str =
new Integer(date.get(Calendar.YEAR)).toString()+"/"+
new Integer(date.get(Calendar.MONTH)+1).toString()+"/"+
new Integer(date.get(Calendar.DAY_OF_MONTH)).toString();
System.out.println(str);

顯示: 2010/1/13

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

在 java 中的時間有 Date 及 Calendar 二個類別,Date 是從 JDK 1.0 就有的類別,很多方法都已經被 Calendar 所取代了。想當然爾,一定是使用 Calendar 來當做時間欄位,因為比較新嘛,也避免 Date 類別最後被 phaseout,那就完蛋了。但是很不幸的是 db4o 卻無法儲存 Calendar 欄位,但可以儲存 Date 欄位,不知為什麼,功力還不深,只知其然,不知其所以然。

// 可以利用下列方式把 Date 轉換成 Calendar
Calendar date=Calendar.getInstance();
date.setTime(transaction.getDate());

1/14 又發現 Calendar 是可以儲存的,不知是不是同一個資料庫存在二個 Calendar 的關係?不過,在 db4o 所附的 OME 發現 Date 被當成一個基礎類別,而 Calendar 卻是一個複雜的類別。看來以後還是以 Date 類別為主比較好,少用 Calendar。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

當我在測試 db4o-7.4\doc\tutorial\src\com\db4o\f1\chapter3\CollectionsExample.java 時,發現了一個大問題。原本整個範例是沒有什麼問題,但是當我把原始碼做了一些修正之後,卻出現很奇怪的問題。在 api doc 裏有提到 Db4o.configure() 即將被捨棄,改用 Db4o.newConfigure() 代替。想當然爾,在以後的程式碼裏當然是用 Db4o.newConfigure(),而不會去用 Db4o.configure()。但是如果你真的如此做,你就完蛋了,因為 Db4o.newConfigure() 的 cascadeOnUpdate 對 List 無法產生作用,反而用 Db4o.configure() 才是對的。

public static void updateCarPart1() {
    Db4o.configure().objectClass(Car.class).cascadeOnUpdate(true);
}
改成
public static void updateCarPart1() {
    Db4o.newConfigure().objectClass(Car.class).cascadeOnUpdate(true);
}

會發現結果是 Ferrari[Michael Schumacher/100]/1 : 1261126146125 : 0.1,0.2,0.3 這一個應該產生的結果,卻沒有生效;也就是說 update 對 List 沒有作用。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

找更多相關文章與討論