问题
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
JTable
is View, based onTableModel
, in most cases you have to convert the view against model converXxxToXxx from inside ofprepareRenderer
orgetTableCellRendererComponent
, becauseJTable
could 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