CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  GUI 设计

[急呀!!]请教一个JTable的动态插入数据的问题

楼主chinahiphop()2006-05-02 02:01:45 在 Java / GUI 设计 提问

我现在做的东西就是:在一个界面中有一个按钮,点这个按钮,出现在一个JFileChooser对话框,然后我随便选择一个文件;我现在想做的就是想把这个文件的文件名放到JTable中,我想动态的增加,以后我再选择一个文件时又可以增加到JTable中去  
  这个怎么做呀~~  
  我看了很多例子,那JTable中的数据都是预先定义好了的,我想动态增加,请问各位高手给小弟一点建议,指点一下,谢谢~~ 问题点数:100、回复次数:7Top

1 楼cheng_young(古道西风瘦马)回复于 2006-05-02 09:36:13 得分 0

在TableModel中提供添加方法就行了,  
  http://community.csdn.net/Expert/topic/4707/4707075.xml?temp=.7663233Top

2 楼heronce(一户侯)回复于 2006-05-02 13:51:31 得分 0

JTable中的数据主要是由列名,和一个表示数据的二维数组确定的,你要添加数据的话,可以先将这个表格释放掉,然后改变二维数组的值,再重新创建Top

3 楼zclgod(春风化雷)回复于 2006-05-11 09:48:55 得分 0

帮顶Top

4 楼Maxcellent(庄生)回复于 2006-05-13 01:48:45 得分 0

不要尝试插到jtable里面  
   
  只要把数据插入到tablemodel里面,jtable就自动更新了Top

5 楼mq612(五斗米)回复于 2006-05-13 08:52:35 得分 0

import   java.awt.*;  
  import   java.awt.event.*;  
  import   java.util.*;  
   
  import   javax.swing.*;  
  import   javax.swing.table.*;  
   
  /**  
    *   JTable的例子  
    */  
  public   class   Test   {  
  private   JFrame   frame   =   null;  
   
  private   JTable   table   =   null;  
   
  private   Table_Model   model   =   null;  
   
  private   JScrollPane   s_pan   =   null;  
   
  private   JButton   button_1   =   null,   button_2   =   null;  
   
  public   Test()   {  
  frame   =   new   JFrame("Test");  
  button_1   =   new   JButton("清除现有的数据");  
  button_1.addActionListener(new   ActionListener()   {  
  public   void   actionPerformed(ActionEvent   e)   {  
  removeData();  
  }  
  });  
  button_2   =   new   JButton("再次添加文件");  
  button_2.addActionListener(new   ActionListener()   {  
  public   void   actionPerformed(ActionEvent   e)   {  
  JFileChooser   f   =   new   JFileChooser();  
  f.showOpenDialog(frame);  
  addData(f.getSelectedFile().getPath(),   f.getSelectedFile().getName());  
  }  
  });  
  model   =   new   Table_Model(20);  
  table   =   new   JTable(model);  
  table.setBackground(Color.white);  
   
  s_pan   =   new   JScrollPane(table);  
   
  frame.getContentPane().add(s_pan,   BorderLayout.CENTER);  
  frame.getContentPane().add(button_1,   BorderLayout.NORTH);  
  frame.getContentPane().add(button_2,   BorderLayout.SOUTH);  
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  frame.setSize(300,   200);  
  frame.setLocationRelativeTo(null);  
  frame.setVisible(true);  
   
  }  
   
  private   void   addData(String   path,   String   name)   {  
  model.addRow(path,   name);  
  table.updateUI();   //   刷新,将改变后的内容显示出来  
  }  
   
  private   void   removeData()   {  
  model.removeRows(0,   model.getRowCount());  
  table.updateUI();   //   刷新,将改变后的内容显示出来  
  }  
   
  public   static   void   main(String   args[])   {  
  new   Test();  
  }  
   
  }  
   
  class   Table_Model   extends   AbstractTableModel   {  
   
  private   Vector   content   =   null;  
   
  private   String[]   title_name   =   {   "ID",   "路径",   "文件"   };  
   
  public   Table_Model()   {  
  content   =   new   Vector();  
  }  
   
  public   Table_Model(int   count)   {  
  content   =   new   Vector(count);  
  }  
   
  public   void   addRow(String   path,   String   file)   {  
  Vector   v   =   new   Vector(4);  
  v.add(0,   new   Integer(content.size()));  
  v.add(1,   path);  
  v.add(2,   file);  
  content.add(v);  
  }  
   
  public   void   removeRow(int   row)   {  
  content.remove(row);  
  }  
   
  public   void   removeRows(int   row,   int   count)   {  
  for   (int   i   =   0;   i   <   count;   i++)   {  
  if   (content.size()   >   row)   {  
  content.remove(row);  
  }  
  }  
  }  
   
  public   String   getColumnName(int   col)   {  
  return   title_name[col];  
  }  
   
  public   int   getColumnCount()   {  
  return   title_name.length;  
  }  
   
  public   int   getRowCount()   {  
  return   content.size();  
  }  
   
  public   Object   getValueAt(int   row,   int   col)   {  
  return   ((Vector)   content.get(row)).get(col);  
  }  
   
  }Top

6 楼shendl(良少)回复于 2006-05-15 10:03:48 得分 0

楼上说得对Top

7 楼dudee()回复于 2006-05-16 11:59:33 得分 0

写一个类extends   AbstractTableModel,例:  
  ArayList   listData   =   new   ArrayList();  
  public   void   addData(Object   yourObject)  
  {  
        //对yourObject   或   listData的出错判断  
        listData.add(yourObject);  
        fireTableDataChanged();        
  }  
  ...  
  public   Object   getValueAt(int   row,   int   col)    
  {  
        //对yourObject   或   listData的出错判断  
        yourObject   obj   =   (yourObject)listData.get(row);  
        if(col   ==   0)  
            obj.getFileName();  
        else   if(col   ==   1)  
            obj.getXXX();  
        else   if(col   ==   2)  
            obj.getXXX();  
        ...  
  }  
   
  //yourObject   自写的一个数据封装类,喜欢添加什么方法就添加什么方法。主要是针对属性多了,容易处理,如果你只有几个属性那就看你方便吧。  
   
   
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:chinahiphop

相关链接

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

广告也精彩

反馈

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