作者prjryu (再努力一点)
看板java
标题Re: [问题] JTable的排序与上色
时间Fri Oct 18 09:30:18 2013
※ 引述《sbrhsieh (十年一梦)》之铭言:
: ※ 引述《prjryu (再努力一点)》之铭言:
: : 下面绿色的部份是我所说改变的地方,对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);
: 你得提供你的 table cell renderer 的码才有助找出问题点。
: 你把 model 内的数据从 string 改成 double,那麽你在 table cell renderer
: 判断要不要标记的作法一定会受影响,你也要一并改写,目前就是没有这部分的
: 资讯。
: 如果你的 JTable 应用很复杂,建议你可以考虑使用 SwingX 之类的套件或许会
: 轻松一点。
感谢sbrhsieh大的回覆
在此附上我的 table cell renderer 的码
public class MainWindow extends javax.swing.JFrame
{ ...
public static double[] dbLow = new double[11];
public static double[] dbHeigh = new double[11];
...
jTable.setDefaultRenderer(Object.class,new ColorTable());
...
}
class ColorTable extends DefaultTableCellRenderer
{
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table,Object
value,boolean isSelected,boolean hasFocus,int row,int col)
{
super.getTableCellRendererComponent(table,value,isSelected,hasFocus,
row,col);
Color foreground, background;
double dbValue = 0;
dbValue = Double.parseDouble( MainWindow.jTable.getValueAt( row,
col).toString());
if( dbValue < MainWindow.dbLow[col] || dbValue > MainWindow.dbHeigh[col] )
{
foreground = Color.WHITE;
background = Color.RED;
}
else
{
foreground = Color.BLACK;
background = Color.GRAY;
}
setForeground(foreground);
setBackground(background);
//System.out.println( "COLOR cell: " + row + ", " + col );
return this;
}
}
不确定问题是否在这边,因为我的认知是table开到哪cell就会画到哪才对...
所以在这边我有试着印出有被我改颜色的cell的row和column号,
有发现JTable里被我塞double的obj cell没有印位置出来
(正常来说是要通通会印出来才对)
--
邮差又来送羊奶了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.192.238
※ 编辑: prjryu 来自: 60.250.192.238 (10/18 09:33)