CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  非技术区

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

楼主babawoo(deang)2005-09-28 10:45:40 在 Java / 非技术区 提问

本人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

相关问题

  • 【wawainfovote讨论】静态页更新问题
  • Smart Client 自动更新讨论
  • 求助关于jtable更新的问题
  • JTable更新的奇怪问题!
  • 有谁作过多表更新,进来讨论一下!
  • 程序自动更新的问题,大家来讨论一下
  • 讨论数据库更新方案,都来发表意见啊
  • C++问题研究之一,大家来讨论
  • 有谁研究过strutsTest?——大家来讨论一下!
  • 联系研究GML的人,共同讨论,共同进步!!

关键词

  • swing
  • mtable
  • jtable
  • import javax
  • jpanel
  • jscrollpane
  • jbutton
  • event
  • insert
  • import java

得分解答快速导航

  • 帖主:babawoo
  • wg112128

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo