JTable row color rendering problem

andy.dreistadt_at_gmail.com
Date: 01/27/05


Date: 27 Jan 2005 06:44:42 -0800

Hi all,

I am having a problem rendering background colors in my JTable. Based
on the last column (Calibration Results - with the value of either
"Pass" or "Fail"), I want to color the entire row of the table green or
red respectively. I have checked online and through usenet, and my
code seems to be right, but no color is rendered when I run the applet.
It must be something small that I'm missing, so if anyone has
experience with JTables and could spot it, I would be greatly
appreciative.

Thanks,

Andy

=-=-==-===-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=
CODE:
=-=-==-===-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.*;
import java.awt.*;

public class InstrumentInventory2 extends javax.swing.JPanel {

udpip gtp;
String ip_saved;
InstrumentList instruments;

/** Creates new form InstrumentInventory */
public InstrumentInventory2( udpip tp, String ip, InstrumentList
inst ) {
gtp = tp;
ip_saved = ip;
instruments = inst;

initComponents();

table_model = new javax.swing.table.DefaultTableModel(
new Object [][] {},new String [] {"ID", "Serial Number",
"Type", "Model", "Name", "Location", "Last Calibration", "Calibration
Results"});

InstrumentTable.setModel(table_model);
InstrumentTable.setDefaultRenderer(String.class , new
GalaxyTableCellRenderer());

refreshInstruments();

}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;

jLabel1 = new javax.swing.JLabel();
Refresh_Button = new javax.swing.JButton();
Print_Instruments_Button = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
InstrumentTable = new javax.swing.JTable();

setLayout(new java.awt.GridBagLayout());

setBackground(new java.awt.Color(224, 224, 224));
setMinimumSize(new java.awt.Dimension(400, 540));
setPreferredSize(new java.awt.Dimension(400, 540));
addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
formFocusGained(evt);
}
});

jLabel1.setFont(new java.awt.Font("Arial Black", 1, 18));

jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Instrument Inventory");
jLabel1.setMaximumSize(new java.awt.Dimension(227, 40));
jLabel1.setMinimumSize(new java.awt.Dimension(227, 40));
jLabel1.setPreferredSize(new java.awt.Dimension(227, 40));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
add(jLabel1, gridBagConstraints);

Refresh_Button.setText("Refresh");
Refresh_Button.setMaximumSize(new java.awt.Dimension(125, 23));
Refresh_Button.setMinimumSize(new java.awt.Dimension(125, 23));
Refresh_Button.setPreferredSize(new java.awt.Dimension(125,
23));
Refresh_Button.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
Refresh_ButtonActionPerformed(evt);
}
});

gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 10, 5);
add(Refresh_Button, gridBagConstraints);

Print_Instruments_Button.setText("Print Instruments");
Print_Instruments_Button.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
Print_Instruments_ButtonActionPerformed(evt);
}
});

gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 10, 0);
add(Print_Instruments_Button, gridBagConstraints);

jScrollPane1.setFocusCycleRoot(true);
jScrollPane1.setMaximumSize(new java.awt.Dimension(650, 404));
jScrollPane1.setMinimumSize(new java.awt.Dimension(650, 404));
jScrollPane1.setPreferredSize(new java.awt.Dimension(650,
404));
InstrumentTable.setModel(new
javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null}
},
new String [] {
"ID", "Serial Number", "Type", "Model", "Name",
"Location", "Last Calibration Date", "Calibration Results"
}
));

InstrumentTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
InstrumentTable.setMaximumSize(new java.awt.Dimension(660,
1500));
InstrumentTable.setMinimumSize(new java.awt.Dimension(660,
1500));
InstrumentTable.setPreferredSize(new java.awt.Dimension(660,
1500));
jScrollPane1.setViewportView(InstrumentTable);

gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
add(jScrollPane1, gridBagConstraints);

}

public void refreshInstruments()
{
//do a call to instruments.refreshInstruments()

table_model.setRowCount(0); //erase all of the rows

for(int i = 0; i < instruments.getInstrumentCount(); i++)
{
Instrument temp = instruments.getInstrument(i);

Vector row = new Vector();

row.add(Integer.toString(temp.getID()));
row.add(temp.getSerial());
row.add(temp.getType());
row.add(temp.getModel());
row.add(temp.getName());
row.add(temp.getLocation());
row.add(temp.getLastCalDate());
row.add(temp.getCalResults());

table_model.addRow(row);
}

InstrumentTable.setModel(table_model);
}

// Variables declaration - do not modify
private javax.swing.JTable InstrumentTable;
private javax.swing.JButton Print_Instruments_Button;
private javax.swing.JButton Refresh_Button;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
private javax.swing.table.DefaultTableModel table_model;

class GalaxyTableCellRenderer extends
javax.swing.table.DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object
value, boolean isSelected, boolean hasFocus, int row, int column)
{
System.out.println("Am I even getting into the
getTableCellRendererComponent");
Component renderer = super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
String myStringToCheck = new
String(table.getValueAt(row,7).toString());

if ( myStringToCheck.equalsIgnoreCase("Fail") ||
myStringToCheck.equalsIgnoreCase("Overdue") )
{
System.out.println("mystring: " + myStringToCheck);
renderer.setBackground(Color.red);
}
else
{
System.out.println("else mystring: " + myStringToCheck);
renderer.setBackground(Color.green);
}

//return super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
return renderer;
    }
}
    
}