Java-JTable:如何更改特定单元格的属性(字体,颜色......?)

时间:2013-01-20 14:38:17

标签: java swing fonts jtable cell

  

可能重复:
  Swing - Setting the color of a cell based on the value of a cell

我有一个Spreadsheet类,包含一个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 个答案:

答案 0 :(得分:1)

偶然的事情:首先,你写的代码可以简单得多。 JTable提供开箱即用的getSelectedRow()getSelectedColumn()方法,因此无需自行编写for循环。

话虽如此,如果你只是想改变所选单元格的渲染方式,你可能实际上并不想做任何这样的事情。更改单元格渲染方式的方法是使用TableCellRenderer。当JTable需要渲染单元格时,它们会将有关该单元格的所有信息(其值,无论是否被选中等)传递给TableCellRenderer。默认情况下安装了DefaultTableCellRenderer,可将您的单元格设为JLabels。您可以使用setDefaultRenderer()设置自己的渲染器。在您的情况下,应该很容易扩展DefaultTableCellRenderer,覆盖getTableCellRendererComponent()来调用super(),然后一旦super()返回,如果单元格是,则将字体设置为粗体地选择。

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