欢迎正在研究JTable数据更新的朋友一起来讨论
本人GUI初学者,现在碰到JTable数据更新比较郁闷~请各位大侠各舒己见 问题点数:20、回复次数:4Top
1 楼babawoo(deang)回复于 2005-09-28 10:46:36 得分 0
那为仁兄可以提供代码?Top
2 楼wg112128(大尾巴狼)回复于 2005-09-28 14:18:43 得分 20
你遇到什么样的问题了?如果没什么特别需求,使用DefaultTableModel就可以,下面的代码被我注释得有点乱,我直接拷贝过来了,肯定能运行,希望对你有点用处
package com.oreilly.jswing2.chap15;
import java.awt.FlowLayout;
import java.io.File;
import java.util.Date;
import java.util.EventListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyTable extends JFrame implements ActionListener ,
TableModelListener , TableColumnModelListener
{
Object mData[][];
String mTitles[] = new String[] { "Directory?", "File Name",
"Read?", "Write?", "Size", "Last Modified" };
MyTableModel mTableModel;
MyTableColumnModel mTableColumnModel;
JTable mTable;
public MyTable()
{
setSize(500, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//为mData装载数据
setFileStats(new File("E:/"));
mTableModel = new MyTableModel(mData, mTitles);
mTableColumnModel = new MyTableColumnModel();
//使用TableModel和TableColumnModel初始化JTable
mTable = new JTable(mTableModel, mTableColumnModel);
//或者用这种方式加载列模型
//mTable=new JTable(mTableModel);
//mTable.setColumnModel(mTableColumnModel);
//如果使用了自定义的TableColumnModel作为JTable构造函数的参数,必须写这一行。
//如果是构造JTable后才setColumnModel()就不用
//具体为什么我还没有参透,呵呵
mTable.createDefaultColumnsFromModel();
//为JTable注册监听器
mTable.getModel().addTableModelListener(this);
mTable.getColumnModel().addColumnModelListener(this);
mTable.getColumnModel().getSelectionModel().addListSelectionListener(new MyColumeSelectionListener());//处理列选择
mTable.getSelectionModel().addListSelectionListener(new MyLineSelectionListener());//处理行选择
//JTable的修饰方法
mTable.setShowGrid(false);
JScrollPane jp = new JScrollPane(mTable);
JButton insert = new JButton("Insert");
insert.addActionListener(this);
JPanel jPanel = new JPanel();
jPanel.setLayout(new FlowLayout());
jPanel.add(insert);
this.getContentPane().add(jPanel, BorderLayout.NORTH);
this.getContentPane().add(jp, BorderLayout.CENTER);
}
public void setFileStats(File dir)
{
String files[] = dir.list();
mData = new Object[files.length][mTitles.length];
for ( int i = 0; i < files.length; i++ )
{
File tmp = new File(files[i]);
mData[i][0] = new Boolean(tmp.isDirectory());
mData[i][1] = tmp.getName();
mData[i][2] = new Boolean(tmp.canRead());
mData[i][3] = new Boolean(tmp.canWrite());
mData[i][4] = new Long(tmp.length());
mData[i][5] = new Date(tmp.lastModified());
}
}
public void testInsert()
{
// Object ob[]=new Object[6];
// ob[0]=new Boolean(true);
// ob[1]=new String ("da");
// ob[2]=new Boolean(false);
// ob[3]=new Boolean(false);
// ob[4]=new Long(41);
// ob[5]=new Date();
// mTableModel.addRow(ob);
TableColumn tableColumn=new TableColumn();
tableColumn.setHeaderValue("very well");
// mTableColumnModel.addColumn(tableColumn);
mTable.addColumn(tableColumn);
// myTableModel.setNumRows(100);
// myTableModel.removeRow(3);
// myTableModel.moveRow(0,1,4);
// setFileStats(new File("c:/"));
// myTableModel.setDataVector(data,titles);
}
public void showTableColumnModel()
{
System.out.println("------TableColumnModel----------");
//TableColumnModel所管辖的列数
int columnCount = mTableColumnModel.getColumnCount();
System.out.println("**遍历列");
TableColumn tableColumn = null;
for ( int i = 0; i < columnCount; i++ )
{
tableColumn = mTableColumnModel.getColumn(i);
System.out.println("第" + i + "列");
System.out.println("getCellEditor()=="
+ tableColumn.getCellEditor());
System.out.println("getCellRenderer()=="
+ tableColumn.getCellRenderer());
System.out.println("getHeaderRenderer()=="
+ tableColumn.getHeaderRenderer());
System.out.println("getIdentifier()=="
+ tableColumn.getIdentifier());
//注意这是在TableColumnModel中的原始下标,
//不一定等于表格显示出来后的位置
System.out.println("getModelIndex()=="
+ tableColumn.getModelIndex());
System.out.println("getHeaderValue()=="
+ tableColumn.getHeaderValue());
System.out.println("tableColumn.getWidth()=="
+ tableColumn.getWidth());
/*
* Tab;eColumnModel.getColumnIndex(Object identifier)
* 参数Identifier(它是TableColumn的一个属性,用于唯一标示TableColumnModel
* 中的一个列。如果没有为列指定Indetifer,那么getIdentifier()方法返回的就是getHeaderValue()
* 的值。) 方法返回的是参数Indentifier所在当前显示的表格中的位置,注意可不一定是
* getModelIndex()的值,getModelIndex()返回的是在TableColumnModel中的顺序
*/
System.out.println("getColumnIndex=="
+ mTableColumnModel.getColumnIndex(tableColumn
.getIdentifier()));
}
System.out.println("**其他方法");
//输出总共选中的列数
int selectedColumnCount = mTableColumnModel.getSelectedColumnCount();
System.out.println("getSelectedColumnCount()==" + selectedColumnCount);
//输出选中的列在当前显示出来的表格上的列号数组
System.out.print("getSelectedColumns()==");
int selectedColumns[] = mTableColumnModel.getSelectedColumns();
for ( int i = 0; i < selectedColumns.length; i++ )
{
System.out.print(selectedColumns[i] + " ,");
}
System.out.println(" ");
//返回列之间的间隔
int columnMargin = mTableColumnModel.getColumnMargin();
System.out.println("getColumnMargin()==" + columnMargin);
//所有列的总宽度
int totalColumnWidth = mTableColumnModel.getTotalColumnWidth();
System.out.println("getTotalColumnWidth()==" + totalColumnWidth);
}
public void showTableModel()
{
System.out.println("------TableModel----------");
int columnCount=mTableModel.getColumnCount();
for(int i=0;i<columnCount;i++)
{
System.out.println(mTableModel.getColumnName(i));
// System.out.println(mTableModel.getColumnClass(i).getName());
}
System.out.println(mTableModel.getRowCount());
}
Top
3 楼wg112128(大尾巴狼)回复于 2005-09-28 14:19:11 得分 0
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
MyTable myTable = new MyTable();
myTable.setVisible(true);
}
});
}
public void actionPerformed(ActionEvent e)
{
// TODO 自动生成方法存根
if ( e.getActionCommand().equals("Insert") )
{
//testInsert();
testInsert();
showTableModel();
showTableColumnModel();
}
}
/**
* TableModelListener的方法
* @param e
*/
public void tableChanged(TableModelEvent e)
{
// TODO 自动生成方法存根
System.out.println("tableChanged(...)");
}
/**
* TableColumnModelListener方法
*/
public void columnMarginChanged(ChangeEvent e)
{
// TODO 自动生成方法存根
System.out.println("columnMarginChanged(...)");
}
/**
* TableColumnModelListener方法
*/
public void columnSelectionChanged(ListSelectionEvent e)
{
// TODO 自动生成方法存根
System.out.println("columnSelectionChanged(...)");
}
/**
* TableColumnModelListener方法
*/
public void columnAdded(TableColumnModelEvent e)
{
// TODO 自动生成方法存根
System.out.println("columnAdded(...)");
}
/**
* TableColumnModelListener方法
*/
public void columnMoved(TableColumnModelEvent e)
{
// TODO 自动生成方法存根
System.out.println("columnMoved(...)");
}
/**
* TableColumnModelListener方法
*/
public void columnRemoved(TableColumnModelEvent e)
{
// TODO 自动生成方法存根
System.out.println("columnRemoved(...)");
}
}
class MyTableColumnModel extends DefaultTableColumnModel
{
public void addColumn(TableColumn tc)
{
super.addColumn(tc);
int newIndex = sortedIndexOf(tc);
if ( newIndex != tc.getModelIndex() )
{
this.moveColumn(tc.getModelIndex(), newIndex);
}
}
protected int sortedIndexOf(TableColumn tc)
{
int stop = this.getColumnCount();
String name = tc.getHeaderValue().toString();
for ( int i = 0; i < stop; i++ )
{
if ( name.compareTo(this.getColumn(i).getHeaderValue().toString()) <= 0 )
{
return i;
}
}
return stop;
}
}
class MyTableModel extends DefaultTableModel
{
MyTableModel(Object[][] data, Object[] columnNames)
{
super(data, columnNames);
}
}
/**
* 选中监听器不太好使
*/
class MyLineSelectionListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
// TODO 自动生成方法存根
System.out.println("valueChanged()");
int first=e.getFirstIndex();
int last=e.getLastIndex();
// System.out.println("选中"+first+"--"+last+"行");
}
}
/**
* 选中监听器不太好使
*/
class MyColumeSelectionListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
// TODO 自动生成方法存根
System.out.println("valueChanged()");
int first=e.getFirstIndex();
int last=e.getLastIndex();
// System.out.println("选中"+first+"--"+last+"列");
}
}Top
4 楼babawoo(deang)回复于 2005-09-29 16:11:49 得分 0
好, 我研究一下,谢谢你!Top




