2008年7月31日 星期四

[JAVA] 讀取JAR裡面的文件

=====以下內容取自JavaWorld=======
http://www.javaworld.com.tw/jute/post/view?bid=5&id=38475&sty=3&age=0&tpg=1&ppg=1#38475

方法一:new ImageIcon(getClass().getClassLoader().getResource("image/fd.png"))

方法二:
import javax.swing.*;

public class Test {
public static void main(String[] args) {
JFrame f = new JFrame("test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Test test = new Test ();
ImageIcon aa = new ImageIcon(test.getClass().getResource("tw/folder.gif"));
JPanel p = new JPanel();
JLabel jb = new JLabel(aa);
p.add(jb);
f.getContentPane().add(p);
f.setBounds(100,100,400,400);
f.show();
}
}

另外Duncan提到:
透過一個 class 的 first class object(Class) 的 getResource method 取得資源,
所給定的資源路徑是相對於 class 的 package。
如果你使用 ClassName.class.getResource("tw/idv/sai/image/a.jpg") ,
那麼這張 a.jpg 必須在 ClassName 的 package 下的 tw\idv\sai\image 目錄裡。
如果使用 getClass().getResource("tw/idv/sai/image/a.jpg") ,
那麼要看 getClass() expression 所在的 scope 到底是指哪一個 instance,
這個 instance 所屬類別的 full-qualified name 所指出的那個目錄下,
必須有 tw\idv\sai\image 目錄裡頭放 a.jpg。

========以下內容取自PTT JAVA版========

文章代碼 #171nVtL 作者:psalter
補充一下
getClass().getResourceAsStream("config.properties");
是從目前class所在的目錄下讀取檔案,也就是檔案要跟class放在一起
如果用 getClass().getResourceAsStream("/config.properties");
會從class所屬的package最上層目錄去找檔案,例如 package為:
my.fun.ap 則會找 my/config.properties
至於要不要讓檔案跟class放在一起,那就需要評估看看了....

文章代碼 #171ns9Rc 作者:qrtt1

建議不要用 getClass()
統一寫成 YourClass.class.getResourceAsStream("/config.properties");
才可以放在 static/non-static 的 method 中

有興趣的可以去看那一串討論串!!

2008年7月20日 星期日

[JAVA]JDBC小記

getXXX(int columnIndex)用欄位索引取得ResultSet物件中的資料。第1欄的index為1而非0

getMetaData()回傳ResultSetMetaData物件,此物件記載了ResultSet物件欄位屬性欄位數、欄位名稱、欄位資料型態。

如果真的要取得 result set 的 record 總筆數,可視情況需要,採用以下其中一種方法:

1. 先以 “SELECT COUNT(*) …” 查詢總筆數,再以正常的 SQL 指令取得 ResultSet。但要注意兩階段之間資料會不會有異動。

2. 取得 ResultSet 之後,以迴圈累計資料個數:
int count = 0;while (rs.next()) { ++count; //…}

3. 取得 scrollable 的 ResultSet 之後,將游標移到最後一筆資料:
int count;if (rs.last()) count = rs.getRow();else count = 0;rs.beforeFirst(); // 或 rs.first();

[JAVA] JTABLE 更新範例

作者 slayer.bbs@bbs.wretch.cc (foolish), 看板 java
標題 Re: [問題] JTable row 數目更新
時間 無名小站 (Wed Jul 5 19:27:36 2006)
轉信 ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!news.ee.ttu!netnews.csie.nc



import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel {
private String[] columnNames = new String[] { "Name", "Size","AccessRight" };
private Object[][] rowData = new Object[][] { new Object[] { "XD", "", ""} };
public String getColumnName(int col) { return columnNames[col].toString(); }
public int getRowCount() { return rowData.length; }
public int getColumnCount() { return columnNames.length; }
public Object getValueAt(int row, int col) { return rowData[row][col]; }
public boolean isCellEditable(int row, int col) { return true; }
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col); }
public void setData() {
// for test
this.rowData = new Object[][] {
new Object[] { "orz", "xd", "hah" },
new Object[] { "orz", "xd", "hah" },
new Object[] { "orz", "xd", "hah" },
new Object[] { "orz", "xd", "hah" },
new Object[] { "orz", "xd", "hah" } };
this.fireTableDataChanged(); }
}

創建TABLE

model = new MyTableModel();
table =new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(300,200)); model.addTableModelListener(new TableModelListener(){
public void tableChanged(TableModelEvent e) {
table.updateUI();
}});


之後再去呼叫紅色部分即可!!


=======================================
後來我自己將紅色部分改成
public void setData(Object[][] data) {
this.rowData = data.clone();
this.fireTableDataChanged(); }