Topic: CrossTable的问题 |
Print this page |
1.CrossTable的问题 | Copy to clipboard |
Posted by: rego Posted on: 2002-12-25 21:16 Swing中的JTable无法实现交叉表的功能,我目前的做法是使用JClass的JCTable,使用3个TableModel分别控制行头、列头和交叉表,不知有无更好的解决办法? |
2.CrossTable的问题 [Re: rego] | Copy to clipboard |
Posted by: 烂泥 Posted on: 2002-12-25 21:45 交叉表 是什么意思?呵呵 |
3.Re:CrossTable的问题 [Re: rego] | Copy to clipboard |
Posted by: rego Posted on: 2002-12-26 21:19 就像是Excel里的Pivot Table。 给出我写的代码,希望能抛砖引玉。 package com.mydomain.table; import javax.swing.table.*; import javax.swing.ListModel; import javax.swing.event.TableModelEvent; /** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */ public class CrossTableModel extends AbstractTableModel { CrossTableModelUtility ctmu; IInnerTableProvider itp; IRowHeaderProvider rhp; IColumnHeaderProvider chp; public CrossTableModel(CrossTableModelUtility ctmu) { this.ctmu =ctmu; try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } public int getColumnCount() { return chp.getColumnHeaderModel().getColumnCount()+2 ; } public Object getValueAt(int row, int column) { switch (column) { case 0: { if (row==0) return null; return ctmu.lookupRowHeader(row-1); } case 1: { if (row==0) return null; return ctmu.getRowHeaderModel().getValueAt(row-1,1); } default: if (row==0) return ctmu.getColumnHeaderModel().getValueAt(0,column-2); return ctmu.getInnerTableModel().getValueAt(row-1, column-2); } } public int getRowCount() { return rhp.getRowHeaderModel().getColumnCount()+1 ; } private void jbInit() throws Exception { } public String getColumnName(int column) { switch (column) { case 0: case 1: return null; default: return ctmu.lookupColumnHeader(column-2); } } public Class getColumnClass(int columnIndex) { return CompositeModel.class; } public boolean isCellEditable(int rowIndex, int columnIndex) { switch (columnIndex) { case 0: if (rowIndex!=0) return false; default: return true; } } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { /**@todo: Override this javax.swing.table.AbstractTableModel method*/ super.setValueAt( aValue, rowIndex, columnIndex); } } package com.mydomain.table; import javax.swing.table.*; /** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */ public interface CrossTableModelUtility { public AbstractTableModel getInnerTableModel(); public AbstractTableModel getColumnHeaderModel(); public AbstractTableModel getRowHeaderModel(); public TableCellRenderer getCompositeRenderer(); public TableCellEditor getCompositeEditor(); public void addArchModelListener(ArchModelListener l); public int getRowHeaderCount(); public int getColumnHeaderCount(); public Object lookupRowHeader(int row); public String lookupColumnHeader(int column); public Object lookupCellValue(int row, int column); public CompositeModel lookupColumnArchCellValue(int column); public CompositeModel lookupRowArchCellValue(int row); } |
4.你的代码没有注解! [Re: rego] | Copy to clipboard |
Posted by: 烂泥 Posted on: 2002-12-27 00:32 没有明白,还是直接把功能写出来! 难道是要完成EXcel的数据透视??? |
5.Re:CrossTable的问题 [Re: rego] | Copy to clipboard |
Posted by: rego Posted on: 2002-12-27 20:55 例如一个班级有50个学生,每个学生参加10门以上的考试。 所谓的交叉表就是以学生名字为行,课程为列,在对应的格子里填入该学生这门课程的成绩。 听上去很简单,可是在Swing中实现并非易事,似乎必须突破Swing的范围。 |
6.Re:CrossTable的问题 [Re:rego] [Re: rego] | Copy to clipboard |
Posted by: 烂泥 Posted on: 2002-12-28 16:58 行头由“考试”的课程数据构造不是行吗? 把"学生"的名字集放在第 0 列不就行了 |
7.没有碰到实际问题是很难理解的 [Re: rego] | Copy to clipboard |
Posted by: jeasonzhao Posted on: 2002-12-28 17:30 呵呵,我说的是废话 |
8.Re:CrossTable的问题 [Re: rego] | Copy to clipboard |
Posted by: supermy Posted on: 2002-12-31 09:54 你用的是什么数据库,ORACLE,SQL SERVER,MY SQL 等一般大型数据库都自带这些功能。 |
9.Re:CrossTable的问题 [Re: rego] | Copy to clipboard |
Posted by: Biubiu Posted on: 2003-01-01 12:57 rego wrote: 就你所说的这些,一个简单的JTable就可以搞定。把学生的名字设置成不可编辑就可以了。为什么非用交叉表呢? |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |