2013-01-20 35 views
-1

可能重复(字体,颜色...?):
Swing - Setting the color of a cell based on the value of a cellJava的JTable中:我怎样才能改变一个特定细胞的属性

我有一个电子表格类,包含一个JTable及其TableModel。 而我的主窗口包含这个电子表格和一个按钮列表,例如一个大胆的。

我能顺利拿到选定单元格(见下面的代码),但我不知道该怎样来改变它的内容和字体,颜色等

public void actionPerformed(ActionEvent e) 
{ 
    int rowToUpdate = -1, columnToUpdate = -1; 
    for(int i = 0 ; i < tableToUpdate.getRowCount() ; i++) 
     for (int j = 0 ; j < tableToUpdate.getColumnCount() ; j++) 
      if(tableToUpdate.isCellSelected(i, j)){ rowToUpdate = i; columnToUpdate = j; } 

    if(rowToUpdate >= 0 && columnToUpdate >= 0) 
    { 
     if(e.getSource == boldButton) 
     { 
      // Here, how to change the bold of the cell(rowToUpdate,columnToUpdate) 
     } 
    } 
} 

回答

1

几件事情的想法:第一,你写的代码可能会简单得多。 JTable自带了getSelectedRow()getSelectedColumn()方法,因此无需自己编写for循环。这就是说,如果你只是想改变所选单元格的渲染方式,那么你可能实际上并不想这样做。更改单元格渲染方式的方法是使用TableCellRenderer。当JTable需要渲染单元格时,他们将所有关于该单元格的信息(其值,是否被选中等)传递给TableCellRenderer。默认情况下安装了DefaultTableCellRenderer,这会将您的单元格渲染为JLabels。您可以使用setDefaultRenderer()设置您自己的渲染器。在你的情况下,应该很容易扩展DefaultTableCellRenderer,覆盖getTableCellRendererComponent()来调用super(),然后一旦super()返回,将字体设置为粗体,如果选中单元格。

JTable的javadoc具有JTable教程的链接,该教程具有关于使用自定义渲染器的特殊部分。该教程(以及其他一些伟大的Swing教程)可以在http://docs.oracle.com/javase/tutorial/uiswing/components/table.html找到。