我们都知道JTable需要使用一个Model配合才能更好地发挥其作用。而使用Model有好多种方法,但是难易程度却大大不同,比如说我们使用AbstractTableModel接口要实现里面的好多方法,相对于这一点,使用DefaulttableModel 就可以大大而简化我们的工作量,我们只需要实现自己需要的方法就可以了。下面是一个简单的使用案例:
package UsefulKnowledge;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.util.Vector;
import javafx.stage.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class JTableTest implements TableModelListener{
JTable table=null;
MyTable my=null;
public JTableTest(){
JFrame frame=new JFrame();
my=new MyTable();
my.addTableModelListener(this);
table=new JTable(my);
table.setPreferredScrollableViewportSize(new Dimension(400,80));
JScrollPane s=new JScrollPane(table);
Container container=frame.getContentPane();
container.add(s,BorderLayout.CENTER);
frame.setTitle("Add_Remove_cells");
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new JTableTest();
}
/**
* 处理边个变化的事件函数
*/
@Override
public void tableChanged(TableModelEvent e) {
// TODO Auto-generated method stub
int row=e.getFirstRow();
int grade1=((Integer)(my.getValueAt(row, 1))).intValue();
int grade2=((Integer)(my.getValueAt(row, 2))).intValue();
int total=grade1+grade2;
my.mySetValueAt(new Integer(total), row, 3);
table.repaint();
}
/**
* 使用此内部类来创建一个表格
* @author Administrator
*
*/
class MyTable extends AbstractTableModel{
Object[][]p=
{
{"Tom",new Integer(91),new Integer(1949),new Integer(1910)},
{"Jack",new Integer(82),new Integer(1969),new Integer(1510)},
{"Maria",new Integer(47),new Integer(1957),new Integer(1040)},
{"Jane",new Integer(61),new Integer(1957),new Integer(1180)},
{"Biao",new Integer(90),new Integer(1987),new Integer(1770)}
};
String[] names={"Name","Age","Birthday","Salary"};
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return p.length;
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return names.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return p[rowIndex][columnIndex];
}
public String geColumnName(int col){
return names[col];
}
public Class getColumnClass(int c){
return getValueAt(0,c).getClass();
}
public boolean isCellEditable(int row,int column){
return true;
}
public void setValueAt(Object value,int row,int column){
p[row][column]=value;
fireTableCellUpdated(row, column);
}
public void mySetValueAt(Object value,int row,int column){
p[row][column]=value;
}
}
}
我们使用tableChange方法来实现对表格内容改变的侦听。只需要实现相关的方法就可以实现对表格的操作咯。
那么赶紧试试吧。
第二部分:实现对表格内容的增删改
(1)增加行:DefaultModel.addRow(new Vector);//我们可以在Vector内添加具体的内容
(2)删除行:
int rowCount=defaultModel.getRowCount()-1;
if(rowCount>=0){
defaultModel.removeRow(rowCount);
defaultModel.setRowCount(rowCount);
}
table.revalidate();//最后这一个方法一定不要忘记,否则可能导致表格内容没有更新。