当前位置: 技术问答>java相关
jTable的DefaultTableMode和AbstractTableModel之间的区别
来源: 互联网 发布时间:2015-09-12
本文导语: 能谈谈两者的异同吗??? 在一个APPLICATION里,我希望用一个jTable来显示不同的表,其列是不同的,请问在程序里怎么更换Model/??? | 用一个jTable来显示不同的表?不太明白你的意思。试试jTable....
能谈谈两者的异同吗???
在一个APPLICATION里,我希望用一个jTable来显示不同的表,其列是不同的,请问在程序里怎么更换Model/???
在一个APPLICATION里,我希望用一个jTable来显示不同的表,其列是不同的,请问在程序里怎么更换Model/???
|
用一个jTable来显示不同的表?不太明白你的意思。试试jTable.setModel()行不行。
|
DefaultTableMode是继承了AbstractTableModel的,也就是说DefaultTableMode比AbstractTableModel多添加了一些基本的jTable模式,即设定了一些方法的默认结构,比如jTable行的可选设置,改动设置等……
至于你的需要,建议去这里看看有无你需要的例子:
http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
至于你的需要,建议去这里看看有无你需要的例子:
http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
|
AbstractTableModel非常简单,只是用来得到Table的一些属性和对一些事件进行处理,并不能设置它的属性和对Table添加数据。因为他继承自TableModel,所以可以用它来接受JTable的TableModel对象,主要是对那些在JTable构造函数里已经添加了数据的表,而不是用TableModel来添加数据的表。
DefaultTableMode是个比较复杂的TableMode,控制也复杂,可以构筑复杂的表格。
更换Model(DefaultTableMode或者其子类):
table.setModel(model);
更新UI:
table.upDateUI();
package javax.swing.table;
import java.io.Serializable;
import java.util.EventListener;
import javax.swing.event.*;
public abstract class AbstractTableModel
implements TableModel, Serializable
{
public AbstractTableModel()
{
listenerList = new EventListenerList();
}
public String getColumnName(int i)
{
String s = "";
for(; i >= 0; i = i / 26 - 1)
s = (char)((char)(i % 26) + 65) + s;
return s;
}
public int findColumn(String s)
{
for(int i = 0; i = 0; i -= 2)
if(aobj[i] == (javax.swing.event.TableModelListener.class))
((TableModelListener)aobj[i + 1]).tableChanged(tablemodelevent);
}
public EventListener[] getListeners(Class class1)
{
return listenerList.getListeners(class1);
}
public abstract Object getValueAt(int i, int j);
public abstract int getColumnCount();
public abstract int getRowCount();
protected EventListenerList listenerList;
}
DefaultTableMode是个比较复杂的TableMode,控制也复杂,可以构筑复杂的表格。
更换Model(DefaultTableMode或者其子类):
table.setModel(model);
更新UI:
table.upDateUI();
package javax.swing.table;
import java.io.Serializable;
import java.util.EventListener;
import javax.swing.event.*;
public abstract class AbstractTableModel
implements TableModel, Serializable
{
public AbstractTableModel()
{
listenerList = new EventListenerList();
}
public String getColumnName(int i)
{
String s = "";
for(; i >= 0; i = i / 26 - 1)
s = (char)((char)(i % 26) + 65) + s;
return s;
}
public int findColumn(String s)
{
for(int i = 0; i = 0; i -= 2)
if(aobj[i] == (javax.swing.event.TableModelListener.class))
((TableModelListener)aobj[i + 1]).tableChanged(tablemodelevent);
}
public EventListener[] getListeners(Class class1)
{
return listenerList.getListeners(class1);
}
public abstract Object getValueAt(int i, int j);
public abstract int getColumnCount();
public abstract int getRowCount();
protected EventListenerList listenerList;
}
|
如果你要继承AbstractTableModel则要求写的代码很多,看看DefaultTableModel的代码就知道了,但是功能扩充强大,如果继承DefaultTableModel则省事很多,一般应用继承后者就够了。
|
如果你想对你的JTable加入些特殊的处理,那使用AbstractTableModel会更灵活,不过你要写更多的代码,如果你的Jtable中只有些Lable,TextField,ComboBox等那就用DefaultTableModel,它已经实现了这些组件的基本的处理方法。