看板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
托您的福,让我再复习了一下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();
}
}
※ 引述《[email protected] (眠月)》之铭言:
> 初学 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 修改这篇文章
1F:推 kairy:这篇太棒了XD~谢谢 05/15 16:39