问题
I'm trying to create a simple To-Do list Java application connected to MS Access and I used JTable and DefaultTableModel to display the list. I want to mark completed tasks by changing its color when I click on a button. I have a boolean field named 'completed' that serves as indicator.
String header[] = {"priority", "task"};
String data[][];
DefaultTableModel model = new DefaultTableModel(data, header);
JTable table = new JTable(model);
// to be replaced with code that affects only specific cells not the whole table
table.setFont(customFont);
I already have a Font object that I called customFont, which is ready to be applied. My question is, how do I apply it only to specific cells where completed==true.
Sample codes would be much appreciated.
回答1:
easiest of ways is look at prepareRenderer(), best of all is @camickr Table Row Rendering
JTableis View, based onTableModel, in most cases you have to convert the view against model converXxxToXxx from inside ofprepareRendererorgetTableCellRendererComponent, becauseJTablecould be sorted of filteredmethods
code
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
returns access to the specific cell in JTable - (TableCellRenderer renderer, int row, int column)
回答2:
Use DefaultTableCellRenderer, then you can use setForeground() and setBackground().
refer to the page.. http://www.jyloo.com/news/?pubId=1282737395000
or see this example...
/*This is the raw code I have written.*/
JTable Tbl=new JTable(2,2){
DefaultTableCellRenderer colortext=new DefaultTableCellRenderer();
{
colortext.setForeground(Color.RED);
}
@Override
public TableCellRenderer getCellRenderer(int arg0, int arg1) {
return colortext;
}
};
回答3:
I believe you can specify this behavior in
TableCellRenderer.getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column)
method of the table
来源:https://stackoverflow.com/questions/10087361/how-to-apply-font-color-to-specific-cells-on-jtable-that-uses-defaulttablemodel