jtable里如何设置某列的类型为Boolean,Integer等?

dash_running 2009-07-28 12:47:16
我创建jtable是先添加column,再往里面添值,不是像sun 的 jtable的tutorial 里那样,把column和每个column的值都初始化好后一次添加到jtable里,所以不知道在往jtable里添加列的时候,如何指定这列是boolean.

我想实现的是jtable里 添加如下列
id Integer
name String
isvalid Boolean

目前代码是这样的:

DefaultTableModel md = (DefaultTableModel) this.getJTable().getModel();
md.addColumn("id");
md.addColumn("name");
md.addColumn("isvalid");

但不知道如何指定这各个列的数据类型,请问如何指定??
...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dash_running 2009-07-28
  • 打赏
  • 举报
回复
各位好像没明白我的意思,不过我自己已经解决了。

DefaultTableModel 把每列都当 String来处理,显示数据的时候由于会自动调用toString方法,所以不会出错,但是,要是从jtable里读数据,就得一个个做数据类型转换,把String转成Integer,Double,等等,
(如believeyourself86所用的方法),但很不方便啊,
但其实完全可以直接取出来就是Integer,Boolean,甚至是自己定义的bean 等类型,要实现这个功能,就得自己写个 TableModel, 重写父类的 getColumnClass 方法,返回自己想要的数据类型的 class就可以了。
我写的如下:

public class MyTableModel extends DefaultTableModel {

private List<Class> colTypes = new ArrayList<Class>();
public Class getColumnClass(int c) {
return colTypes.get(c);
}
public void addColumn(Object columnName, Class columnType){
this.addColumn(columnName);
this.colTypes.add(columnType);
}
}


knightzhuwei 2009-07-28
  • 打赏
  • 举报
回复
直接放进去 显示的时候是调用对象的toString()方法的应该
  • 打赏
  • 举报
回复
直接把数据填进去就可以了。
believeyourself86 2009-07-28
  • 打赏
  • 举报
回复
我觉得jtable里只是用来显示一些信息的,把要显示的类型都转换成String类型的再在Jtable里显示就是了。我平时就是这么做的。
dash_running 2009-07-28
  • 打赏
  • 举报
回复

Java数据库查询结果的输出 摘自:北京海脉信息咨询有限公司   利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。 类Vector:   定义如下: public class Vector extends AbstractList implements List , Cloneable , Serializable{…} 类JTable:   JTable组件是Swing组件中比较复杂的小件,隶属于javax.swing包,它能以二维表的形式显示数据。类Jtable: 定义如下: public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible{…} 类AbstractTableModel:   定义如下: public abstract class AbstractTableModel extends Object implements TableModel, Serializable{…}   生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面三个方法: public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column);   我们可以建立一个简单二维表(5×5): TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return 5; } public int getRowCount() { return 5;} public Object getValueAt(int row, int col) { return new Integer(row*col); } }; JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table); 数据库及其连接方法:   我们采用Sybase数据库,数据库存放在数据库服务器中。路径为:D:WORKER,数据库名为:worker.dbf。具有以下字段: 字段名 类型 Wno(职工号) VARCHAR Wname(职工名) VARCHAR Sex(性别) VARCHAR Birthday(出生日期) DATE Wage(工资) FLOAT   要连接此数据库,需使用java.sql包中的类DriverManager。此类是用于管理JDBC驱动程序的实用程序类。它提供了通过驱动程序取得连接、注册,撤消驱动程序,设置登记和数据库访问登录超时等方法。   具体连接方法如下:   定位、装入和链接SybDriver类。 driver="com.sybase.jdbc.SybDriver"; SybDriver sybdriver=(SybDriver) Class.forName(driver).newInstance();   注册SybDriver类。 DriverManager.registerDriver(sybdriver);   取得连接(SybConnection)对象引用。 user="sa"; password=""; url="jdbc:sybase:Tds:202.117.203.114:5000/WORKER"; SybConnection connection= (SybConnection)DriverManager.getConnection (url,user,password); 建立完连接后,即可通过Statement接口进行数据库的查询与更改。 实现方法:   对象声明。   AbstractTableModel tm;   //声明一个类AbstractTableModel对象   JTable jg_table;//声明一个类JTable对象   Vector vect;//声明一个向量对象   JScrollPane jsp;//声明一个滚动杠对象   String title[]={"职工号","职工名",   "性别","出生日期","工资"};   //二维表名   定制表格。   实现抽象类AbstractTableModel对象tm中的方法:   vect=new Vector();//实例化向量   tm=new AbstractTableModel(){   public int getColumnCount(){   return title.length;}//取得表格数   public int getRowCount(){   return vect.size();}//取得表格行数   public Object getValueAt(int row,int column){   if(!vect.isEmpty())   return   ((Vector)vect.elementAt(row)).elementAt(column);   else   return null;}//取得单元格中的属性值   public String getColumnName(int column){   return title[column];}//设置表格名   public void setValueAt   (Object value,int row,int column){}   //数据模型不可编辑,该方法设置为空   public Class getColumnClass(int c){   return getValueAt(0,c).getClass();   }//取得所属对象类   public boolean isCellEditable(int row,int column){   return false;}//设置单元格不可编辑,为缺省实现   };   定制表格:   jg_table=new JTable(tm);//生成自己的数据模型   jg_table.setToolTipText("显示全部查询结果");   //设置帮助提示   jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);   //设置表格调整尺寸模式   jg_table.setCellSelectionEnabled(false);   //设置单元格选择方式   jg_table.setShowVerticalLines(true);//   设置是否显示单元格间的分割线   jg_table.setShowHorizontalLines(true);   jsp=new JScrollPane(jg_table);//给表格加上滚动杠   显示查询结果。   连接数据库:已给出。   数据库查询:   Statement stmt=connection.createStatement();   ResultSet rs=stmt.executeQuery   ("select * from worker");   显示查询结果:   vect.removeAllElements();//初始化向量对象   tm.fireTableStructureChanged();//更新表格内容   while(rs.next()){   Vector rec_vector=new Vector();   //从结果集中取数据放入向量rec_vector中   rec_vector.addElement(rs.getString(1));   rec_vector.addElement(rs.getString(2)); rec_vector.addElement(rs.getString(3)); rec_vector.addElement(rs.getDate(4));   rec_vector.addElement(new Float(rs.getFloat(5)));   vect.addElement(rec_vector);   //向量rec_vector加入向量vect中   }   tm.fireTableStructureChanged();   //更新表格,显示向量vect的内容   实现示图中记录前翻、后翻的效果,有两种方法:   如果软件环境支持JDBC2.0,可直接利用rs.prevoius()和rs.next()获得记录,然后通过类JTextField中的setText()方法,显示出各个字段值。   如果不支持JDBC2.0,则可利用向量Vector按行取出JTable中数据。自定义一个指针,用来记录位置。当指针加1时,取出上一行数据放入Vector中显示;指针减1时,取出下一行数据显示。显示方法同上。
飞鸽传书 一、 背景描述 学习完网络(UDP)后,可以练习部署该项目。 二、 实现要求 模仿飞鸽传书完成飞鸽传书的大部分功能(主要是发送组播信息,传送文件等功能)。 三、 实现技术 a) 使用DatagramSocket、DatagramPacket传递UDP数据。 b) 使用MulticastSocket发送、接受组播消息。 c) 使用ServerSocket、Socket发送接受文件。 d) 使用DefaultTableModel定制需要的JTable。 e) 使用SystemTray、TrayIcon制作托盘图标。 四、 类图 a) 类图 b) 类图说明 类名称 IPMsg 类描述 飞鸽传书主程序。 包描述 main 函数描述 public static void main(String[] args) 类名称 FileData 类描述 此处加入类详细说明 包描述 data 函数描述 public String getFileName() public void setFileName(String fileName) public String getFilePath() public void setFilePath(String filePath) public boolean isFile() public void setFile(boolean isFile) public static FileData stringToFileData(String str) 根据字符串将信息转换为FileData对象。
类名称 FSMessage 类描述 传递消息类。 包描述 data 函数描述 public FSMessage() public FSMessage(Integer type,Object object) public Object getObject() public void setObject(Object object) public Integer getType() public void setType(Integer type) 类名称 User 类描述 用户类。 包描述 data 函数描述 public String getHostName() public void setHostName(String hostName) public String getIpAdress() public void setIpAdress(String ipAdress) public String getLoginName() public void setLoginName(String loginName) public String getPriority() public void setPriority(String priority) public String getUserName() public void setUserName(String userName) public static User getSelf() 获取本机的User对象。 public String toString() public boolean equals(Object obj) public static User strToUser(String userStr) 根据字符串转换成User对象。 类名称 DirectoryChoose 类描述 目录选择对话框。 包描述 frm 函数描述 public DirectoryChoose(Component parent,String title,int mode) 打开文件选择对话框。 public DirectoryChoose(Component parent,String title) 保存文件对话框。 类名称 FileSendMonitor 类描述 文件传送监视器 包描述 frm 函数描述 public FileSendMonitor() private void init() 初始化面板。 public void actionPerformed(ActionEvent e) private class MyDefaultTableModel extends DefaultTableModel table的Model。 类名称 FileSendOK 类描述 文件传送成功。 包描述 frm 函数描述 public FileSendOK(Frame owner, boolean modal,String info) 文件传送成功构造函数。 private void init() 初始化面板。 public void actionPerformed(ActionEvent e) 按钮点击事件。 private void setInfo(String info) 设置当前传送成功的消息。 类名称 FillWidth 类描述 仅仅为了填充BorderLayout的宽度。 包描述 frm 函数描述 public FillWidth(int width,int height) 按照指定宽度和高度构造一个JPanel public FillWidth(int width,int height,Color color) 按照指定宽度和高度、颜色构造一个JPanel 类名称 IPMsgMainFrm 类描述 飞鸽传书的主窗体类。 包描述 frm 函数描述 public IPMsgMainFrm() private void initSystemTray() 初始化托盘图标。 private void init() 初始化面板。 public void actionPerformed(ActionEvent e) 按钮点击事件。 Public void tableChanged(TableModelEvent e) 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 public void windowClosing(WindowEvent e) 内部类 private class MyMouseAdapter extends MouseAdapter public void mouseClicked(MouseEvent e) 内部类 public class MyDefaultTableModel extends DefaultTableModel table的Model。 public boolean isCellEditable(int row, int column) public boolean addUser(User user) 如果行中存在user,则不添加,否则添加。 public User getRow(int n) 得到某行的User对象。 public boolean removeFromIP(String ip) 根据第3及判断ip是否相同删除某行。 public String getIpAddress(int n) 获取某行所表示的ip地址。 内部类 private class MyDropTargetAdapter extends DropTargetAdapter 拖拽事件。 public void setSendFileList(String str) 设置传输文件表。 public String getContent() 获取发送内容。 public String getSendList() 获取发送文件的表。 public void clearSendList() 清空发送文件的表。 public void clearTable() 清空table中内容。 public int[] getSelectRow() 获取选中的行。 public void clearChat() 清空聊天窗口。 类名称 ReceiveNewMSG 类描述 收到消息窗口。 包描述 frm 函数描述 public ReceiveNewMSG(String time,String from,String path,String content,String ip,int port) private void init() 初始化面板。 private void initSendFile(String path) 初始化接受文件的表。 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 public void windowClosing(WindowEvent e) public void initBtnList() 初始化接受文件内容按钮。 public void actionPerformed(ActionEvent e) 按钮点击事件。 public void setSpeed(String speed) 设置下载速度。 private boolean sureStopSend() 确认终止当前传送。 类名称 SendListDialog 类描述 准备传送文件表窗口。 包描述 frm 函数描述 public SendListDialog(Frame owner, boolean modal,boolean isShow) private void init() 初始化面板。 public void actionPerformed(ActionEvent e) 按钮点击事件。 public String getSendFile() 获取传送文件表的文件名组成的字符串。 public String getSendPath() 获取发送的目录路径。 public String getSendList() 获取发送文件的表。 public void clearSendList() 清空发送后的内容。 内部类 public class MyDefaultTableModel extends DefaultTableModel table的Model。 public boolean isCellEditable(int row, int column) public boolean addFile(File file) public boolean isExitFile(File file) public File getFile(int n) private void close() 窗体关闭方法。 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 类名称 ClientTCPThread 类描述 Socket网络客户端。
包描述 logic 函数描述 public ClientTCPThread(ReceiveNewMSG newMSG,String ip,int port,String path,String savePath) public void run() 消息内容: 类型说明: 10:客户端发送文件地址 11:客户端发送的地址有误,不予响应 20:服务端发送相对目录地址到客户端,客户端接到信息创建目录 21:服务端发送相对文件地址到客户端,客户端接到信息创建文件 22:开始发送数据,发送文件长度 31:数据发送完成 40:客户端请求暂停发送 41:客户端请求继续发送 42:服务端取消发送 90:客户端退出 91:服务端退出 92:请求数据全部发送完成. private void sendOK() 传送完成。 private String getSpeed() 获取当前速度。 private void setSpeed() 设置当前速度。 private void dealBeginSend(Object obj) 开始发送数据。 private void closeFile() 关闭文件流。 public void stopSend() 停止传送。 public void pauseSend() 暂停传送。 public void continueSend() 继续发送。 private void createFile(Object obj) 创建文件。 private void createDirectory(Object obj) 创建目录。 private void dealServerQuit() 处理服务端退出。 private void closeClient() 断开连接。 内部类 private class WriteThread extends Thread 书写线程。 public WriteThread(FSMessage message) public void run() public boolean isRun() 类名称 ServerTCPThread 类描述 ServerSocket网络服务端。
包描述 logic 函数描述 public void run() public void closeServer() 关闭到客户端的连接和服务器。 内部类 private class ClientThread extends Thread 客户端线程类。 public ClientThread(Socket client) public void run() 消息内容: 类型说明: 10:客户端发送文件地址 11:客户端发送的地址有误,不予响应 20:服务端发送相对目录地址到客户端,客户端接到信息创建目录 21:服务端发送相对文件地址到客户端,客户端接到信息创建文件 22:开始发送数据,发送文件长度 31:数据发送完成 40:客户端请求暂停发送 41:客户端请求继续发送 42:服务端取消发送 90:客户端退出 91:服务端退出 92:请求数据全部发送完成. 内部类 private class WriteThread extends Thread public WriteThread(Object obj) public void run() private void send(File file,String parent) throws IOException 发送文件或路径。 public void letClientQuit(int type,String msg) 使得客户端退出。 private void dealClientQuit() 客户端退出。 private void closeClient() 关闭到客户端的连接。 类名称 UDPThread 类描述 接受数据线程类。 包描述 logic 函数描述 public UDPThread() private void initNet() throws UnknownHostException,IOException 初始化网络。 public void run() 发送消息: 消息类型:[hk][10]消息内容 消息说明:数据必须以[hk]开头,第二个方括号表示消息的类型,此后表示消息内容 10:新用户上线,内容格式:用户名|主机名|IP地址|登录名|优先级 11:用户下线,内容格式:IP地址 20:对发有消息、文件,内容格式:[2008-10-09 星期四 13:53:51]<[类型]?路径?文件名|[类型][路径]文件名...多个用|分割>此后显示消息内容
文件类型说明:0:目录;1:文件 private void dealPacket(DatagramPacket packet) 处理数据包。 private void showContent(String content,String ip) 显示用户发送消息内容和目录。 private void telUserMyState(String begin,String ip) 告诉组播组内的其他用户我的状态。 private void telGroupIamOffline(String begin) 告诉组播组内的其他用户下线了。 private void telGroupIamOnline(String begin) 告诉组播组内的其他用户我的状态。 private void sendData(String content,String ip) 告诉组播组内的其他用户我上线了。 public void actionPerformed(ActionEvent e) 按钮事件。 private void addSendList(String ip) 向发送表中添加向发送文件的表。 public boolean isAllowSend(String ip,String path) 检测是否允许向某ip发送某文件。 public boolean deleteSendList(String ip,String path) 当发送完成某个文件后,从发送表中删除以发送的文件。 private void showWrong(String msg,Exception e) 用JOptionPane显示错误的原因。 private void closeAll() 关闭所有开启IO。 private void closeUDP() 关闭UDP端口 private void closeIPMsg() 退出飞鸽传书。 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 public void windowClosing(WindowEvent e) 类名称 DateDeal 类描述 日期处理类。 包描述 tools 函数描述 public static String getCurrentDate() 将当前日期返回"yyyy-MM-dd"的字符串表现形式。 public static String getCurrentTime() 将当前日期返回"yyyy年MM月dd日 HH:mm:ss"的字符串表现形式。 public static String getDate(Date date) 将Date的日期返回"yyyy-MM-dd HH:mm:ss"的字符串表现形式。 public static String getDate2(Date date) 根据当前日期返回不同形式的字符串形式。 public static String getAllDate(Date date) 根据当前日期返回类似:2008-10-09 星期四 13:53:51 格式的日期。 类名称 DownSpeed 类描述 下载速度类。 包描述 tools 函数描述 public static String getSpeed(long totalData,long beginTime,long endTime) 根据下载的字节数和下载的时间返回合适的下载速度。 public static String getSpeed(long totalData) 返回1s中内传输的速度。 类名称 FileInfo 类描述 文件相关信息。 包描述 tools 函数描述 public static String getFileLength(File file) 根据文件返回文件的大小,如1MB。 public static String getFileLength(Long length) 根据long大小返回文件的大小,如2MB。 类名称 SetFont 类描述 设置字体类。 包描述 tools 函数描述 public static void setFont(Font font) 使用UIManager设置某些组件的缺省字体。 c) 效果图 五、 技术技巧提问 a) 使用组播获取组内其他用户,并显示到JTable上 继承DefaultTableModel边定制添加用户方法 b) 给窗体添加拖拽功能 详细参考java.dnd包中的类 c) 添加托盘图标 参考SystemTray和TrayIcon类。 d) 传送文件夹时的递归 思路:如果是文件传送给对方,如果是文件夹,告诉对方创建文件夹,然后递归该文件夹即可。 e) 传送过程中的暂停、停止、继续功能的实现? 参考线程。 六、 附加说明

62,616

社区成员

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

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