目前日期文章:201001 (6)

瀏覽方式: 標題列表 簡短摘要

今天來記錄一下如何監控 JTable 的選擇變化。其實這個功能在寫資料庫應該會很用到,比如查看一個表單,然後自動在另一個 JTable 顯示出表單內的細項,這時就要監控第一個 JTable 選擇變化了。話說 JTable 裏包含三大 Model,有 TableModel 記錄所有資料,有 TableColumnModel 記錄表格標題的資料,最後就是 ListSelectionModel 記錄選擇的資料。而 Model 是做啥的,其實就是一堆資料的處理,包含取得,設定等,當然最重要的就是資料變化的通知;當 Model 資料產生變化時,會通知註冊在 Model 裏所有的 listener,而 listener 根據該變化做出所需的動作。

ListSelectionModel 相對應的監聽介面為 ListSelectionListener,加入監聽的函數為 addListSelectionListener。ListSelectionListener 介面只包含一個函數 valueChanged(ListSelectionEvent e),每次 ListSelectionModel 資料有變化時,就會呼叫 valueChanged;也就是當 JTable 選擇改變時,會執行 valueChanged 函數。

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

在 Java 中,要取得字串在某一種字型所呈現的寬度,需透過 FontMetrics 類別來計算。FontMetrics 為 abstract class,但是我卻找不到 implements 的子類別。不過,可以透過下列方式來取得 FontMetrics 實例。

  1. Graphics.getFontMetrics() 獲取當前字體的字體規格。
  2. Graphics.getFontMetrics(Font f) 獲取指定字體的字體規格。
  3. Component.getFontMetrics(Font font) 獲取指定字體的字體規格。
  4. Component.AccessibleAWTComponent.getFontMetrics(Font f) 獲取此物件的 FontMetrics。
  5. List.AccessibleAWTList.AccessibleAWTListChild.getFontMetrics(Font f) 獲取此物件的 FontMetrics。
  6. MenuComponent.AccessibleAWTMenuComponent.getFontMetrics(Font f) 獲取此物件的 FontMetrics。

因為在取得 FontMetrics 實例時,已經指定字型的字體,所以接下來的函數,用來直接取得字串的顯示寬度。

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

在 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) 人氣()