托您的福,讓我再複習了一下JTable orz
基本上如果沒有人發問,俺是一點也不喜歡用JTable XD
http://nopa.csie.org/64171
=================================================================
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();
}
}
==============================================================
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
public class MyFrame extends JFrame {
private Container c;
private JScrollPane pane;
private JTable table;
private MyTableModel model;
public MyFrame() {
super("Table Demo");
c = this.getContentPane();
c.setLayout(new GridLayout(1, 1));
model = new MyTableModel();
table =new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(300,200));
model.addTableModelListener(new TableModelListener(){
public void tableChanged(TableModelEvent e) {
table.updateUI();
}});
//table.setp
//pane.add(table);
pane = new JScrollPane(table);
c.add(pane);
JButton test = new JButton("test");
c.add(test);
test.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.setData();
}});
// set window operation
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.pack();
this.setVisible(true);
}
public static void main(String[] args){
new MyFrame();
}
}
※ 引述《yoco315.bbs@ptt.cc (眠月)》之銘言:
> 初學 Java 兩天,現在在摸 Swing
> 我根據 java.sun.com 上面的 Java Swing tutorial 關於 JTable 的部份
> 要寫一個簡單的 browser (可以列出目錄下面的檔案跟一些資訊)
> GUI 架構是這樣的
> Frame 放進一個 Panel
> Panel 放進一個 Scroll Panel,這個 Scroll Panel 以 Table 為 Client
> 而這個 Table 是根據 MyTableModel extends AbstractTableModelTableModel 建立的
> 當我每次指定一個目錄給程式的時候
> 我就會根據目錄的內容更新建立一個新的 table model 然後指定給 table
> 我的問題在於
> 每次指定新的 table model 以後
> 雖然 table 的 cell 內容會更新
> 但是 table 的 row 的數目竟然不會更新 orz
> 要等到我 resize window 以後 row 的數目才會更新
> 比如說我上一次瀏覽的目錄有 10 個檔案
> 那 Table 就有 10 rows
> 這次切換到另外一個目錄,假設有 30 個檔案
> 但是 Table 依然只有 10 rows
> 一定要等到我 resize window 之後,table 才會更新成 30 行
> 因為初學,如果問了一個笨問題的話請原諒,
> 我已經查過 google 跟 java.sun.com 還有 javaworld.tw,
> 但是沒有找到解決方法,
> 我試過 updataUI, invalidate, revalidata, fireTableXXXXX, repaint 等
> 也都沒有用。
> 請教前輩我應該如何解決?
> 先謝過。
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知止知止可以不殆譬道之在天 163.26.34.105海
作者在 06/07/05 19:27:36 從 163.26.34.105 修改這篇文章
推
05/15 16:39, , 1F
05/15 16:39, 1F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 5 篇):