作者prjryu (再努力一点)
看板java
标题Re: [问题] JTable的排序与上色
时间Mon Oct 21 14:51:31 2013
※ 引述《sbrhsieh (十年一梦)》之铭言:
: 拼凑所有你提供的码来看,有一些部分要厘清。
: 1) 你若使用 DefaultTableModel,这个 model 会把所有 column 都当作 Object
: type的数据,当你为 Object type 设定 default cell renderer 後,所有的
: column 都会使用同一个 cell renderer 来绘制 cell 外观。
: 但实际上放进 model 的数据中,某些 column 的部分是使用 String,某些 column
: 是 Double,那麽你设计的 cell renderer(ColorTable) 必须能该处理这些不同的
: 数据型别才行。
: 2) ColorTable::getTableCellRendererComponent 一律试着把每个 cell 内的
: 数据转成 String 後以 Double.parseDouble interpret 成 double 数值,在依值
: 来决定要显示的颜色。
: 这个作法必须要放 String 数据的 column 里的 cell value(String) 的内容都
: 是可以 parse 成 double 的(如 "10" 非 "abc")。
: 说起来非 Double 数据的 column 出错机会比较高,但你的观察显示似乎是 Double
: column 没有使用 ColorTable 来做 rendering,有一种可能性在是你非直接使用
: DefaultTableModel 而是使用自己改写过的 table model,你有 override
: getColumnClass method,让放置 Double 数值的 column(s) 传回非
: Object.class,因为程式只为 Object type 设定 default cell renderer,所以
: 不是 Object type 的 column 就会使用 JTable 自己预设准备好的 renderer(为
: Object type column 设定 default renderer R,不代表没有明确设定 default
: renderer 的非 Object type column 都会使用 R,尽管 Object 是任一种 class
: 的 base class)。
: 另外,建议在 getTableCellRendererComponent method 里直接使用 value 这个
: parameter 带进来的值,不需要再透过 row, col 值从 table or model 去取值,
: 会比较不易出错(table, model 都有 getValueAt method,但是两者的参数 row
: 与 col 的意义不一致)。
感谢您的回覆与建议,
您猜的没错,由於需要以数值排序的功能,
所以我override了getColumnClass method,
目的是为了当排序的column型态为double时可以正确以数值大小作为排序依据。
public Class<?> getColumnClass(int column) {
Class<?> returnValue;
if ((column >= 0) && (column < getColumnCount()))
{
if(getValueAt(0, column)!=null)
{
returnValue = getValueAt(0, column).getClass();
}
else
{
returnValue = Object.class;
}
} else
{
returnValue = Object.class;
}
return returnValue;
}
根据您的推论
我程式的问题是由於程式只为Object type设定default cell renderer,所以
不是 Object type 的 column 就会使用 JTable 预设准备好的 renderer。
就我的理解,
在此程式的问题在於没有为Double type设定default cell renderer,所以
不是Double type的column就不会使用JTable我自己预设准备好的 renderer。
但DefaultTableCellRenderer中我只找到也只知道getTableCellRendererComponent
(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
int column)
这里可以改写cell的颜色设定,
请问若要在column为Double type的时候可以正确的使用我设定的default cell
renderer,要如何去修改我的cell renderer(ColorTable) 呢?
--
邮差又来送羊奶了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.192.238