欢迎正在研究JTable数据更新的朋友一起来讨论

babawoo 2005-09-28 10:45:40
本人GUI初学者,现在碰到JTable数据更新比较郁闷~请各位大侠各舒己见
...全文
224 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
babawoo 2005-09-29
  • 打赏
  • 举报
回复
好, 我研究一下,谢谢你!
babawoo 2005-09-28
  • 打赏
  • 举报
回复
那为仁兄可以提供代码?
wg112128 2005-09-28
  • 打赏
  • 举报
回复
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+"列");
}

}
wg112128 2005-09-28
  • 打赏
  • 举报
回复
你遇到什么样的问题了?如果没什么特别需求,使用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());
}

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧