目前日期文章:201103 (4)

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

這幾天在寫 JAVA AP 時,發現了一個問題。就是我直接在 ContentPane 的 add 和 removeAll 來更換 JFrame 的內容。而 add 一個直接 new 的物件,造成被 removeAll 的舊物件一直沒有被釋放。查了一堆資料,只發現 JFrame/JDialog 可以利用 dispose(java.awt.Window) 來釋放所有本機螢幕資源,並將它們標記為不可顯示。所以目前不可以把 JPanel 一直重覆 new


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

TableColumn 是包含在 TableColumnModel 裏面,而 JTable 包含一個 TableColumnModel。所以要取得 TableColumn 必須先取得 TableColumnModel 才可以。另外 JTable 也提供一個 getColumn(Object identifier) 函數來取得 TableColumn,主要也是透過 TableColumnModel.getColumnIndex(Object identifier) 來取得。

  1. TableColumn getColumn(int columnIndex)

    返回 columnIndex 位置列的 TableColumn 物件。

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

原始網頁:http://www.sqlite.org/lang_update.html

۞ update statement

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

當 JTable 內的資料有所變化時,JTable 要如何得知並做出相應的變化呢?其實 JTable implements TableModelListener,而且執行 setModel 時,就會做 dataModel.addTableModelListener(this)。所以只要執行 AbstractTableModel.fireTableDataChanged() 就可以即時變更 table 的內容。或是直接執行 JTable.tableChanged(null) 也可以。

// JTable.java
public void setModel(TableModel dataModel) {
......
    dataModel.addTableModelListener(this);
......
}

public JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) {
......
    if (dm == null) {
        dm = createDefaultDataModel();
    }
    setModel(dm);
    tableChanged(new TableModelEvent(dataModel, TableModelEvent.HEADER_ROW));
    firePropertyChange("model", old, dataModel);
......
}

public void tableChanged(TableModelEvent e) {
    if (e == null || e.getFirstRow() == TableModelEvent.HEADER_ROW) {
......
        resizeAndRepaint();
        return;
    }
......
}
// AbstractTableModel.java
public void fireTableDataChanged() {
    fireTableChanged(new TableModelEvent(this));
}
public void fireTableChanged(TableModelEvent e) {
......
    if (listeners[i]==TableModelListener.class) {
        ((TableModelListener)listeners[i+1]).tableChanged(e);
    }
......
}

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