作者prjryu (再努力一点)
看板java
标题Re: [问题] JTable的排序与上色
时间Thu Oct 17 17:31:32 2013
※ 引述《sbrhsieh (十年一梦)》之铭言:
: ※ 引述《prjryu (再努力一点)》之铭言:
: : 我希望得到一个JTable 它可以排序并将非预期的数字以不同的底色标出
: : 我先是用getTableCellRendererComponent做出了标出非预期的数字cell的底色的功能,
: : 然後使用RowSorter做排序的功能,
: : 发现它的排序方式是把cell的内容当obj排序的,并非预期的递增或递减排序
: : ( ex: 排序 1, 100, 11
: : 预期结果: 1, 11, 100
: : 执行结果: 1, 100, 11
: : )
: : 为了解决这个问题,我将addRow()阵列里数字的Object都改成double的型态,
: : 这样就可以正确显示数字的排序结果了。
: : 但是前面写的标出底色的功能却失效了,
: : 不知道为什麽table在重画cell的时候,
: : 原本obj型态的cell会呼叫自己写的getTableCellRendererComponent且正常上色,
: : 而後来改成double型态的cell却不会呼叫我自己写的getTableCellRendererComponent,
: : 这是我的问题所在,这导致我无法正确的为cell上色...
: : 请指教是否我的用法有错、有什麽其他方法可以解决吗?
: 老实说这样的资讯是看不出来你哪边写错。
: 不过用猜的,会不会是你把资料从 string 改成 double 後,你的 table cell
: renderer 的 code 忘了作对应的改变?
: 补:
: 若你不是针对 table column 去设定 cell renderer 而是从 table 本身去设定
: default cell renderer,那麽 column data 型态变更後,你设定 default cell
: renderer 时指定的型别也要跟着改(除非你指定 Object 但会影响其他的 column)。
下面绿色的部份是我所说改变的地方,对table而言我insert的row仍然是obj阵列,
但我不懂是否是您所说的需要跟着改default cell renderer的情况。
如果需要更动的话应该如何更动呢?
我的default cell renderer会去取table里cell的值计算判断是否染色,
现在遇到的问题是,
那个被我以double形态转成obj型态insert入table的cell不会染色
这种cell重画的时候没有call到我所set的DefaultRenderer...orz
strData = BufferedStream.readLine();
StringTokenizer st = new StringTokenizer(strData, "\t");
st = new StringTokenizer(strData, "\t");
tokens = new Object[15];
for( i=0, j=st.countTokens(); i < j; i++)
{
jLabel1.setText("token: "+j);
if( i > 2 )
{
//放<double>後table才能正确排序,但DefaultTableCellRenderer无法正确上色
tokens[i] = Double.parseDouble( st.nextToken() );
//原:tokens[i] = st.nextToken();//放<obj>後table才能正确上色,但无法正确排序
}
else
{
tokens[i] = st.nextToken();
}
}
defaultTableModel.addRow(tokens);
--
◣ ◢ HEY~~~HEY~~~CHAAAAARLIE~!
。。。。。
◢ ▁ ◣
⊙ ⊙
⊙ .◣
▼▼▼▼
ㄟ
◥ ㄧ◤
\▲▲▲▲
φ ◢ . \ . δ
./ㄨ \\/ˊ◥▄▄◤
\|/ㄑ ( ︶ ˋ\///\/. by Armour@joke
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.192.238
1F:→ DeathWatch:若是再载入资料之前先排序好呢? 10/17 20:20
2F:→ dream1124:RowSorter有排序规则吧? 实作comparable之类的界面看看? 10/17 21:14
3F:→ dream1124:查一下RowSorter的排序规则,让塞进去的物件实作那规则 10/17 21:15