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;
}
}
}
Roland - 27 Jan 2005 15:26 GMT
> Hi all,
>
[quoted text clipped - 10 lines]
>
> Andy
Your table uses the GalaxyTableCellRenderer for columns of type String
[table.setDefaultRenderer(String.class,...)].
Your tablemodel, however, is a DefaultTableModel which returns
Object.class for getColumnClass() [defined in its parentclass
AbstractTableModel
<http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/AbstractTableModel.htm
l#getColumnClass(int)>],
and therefore your custom renderer will not be invoked.
You have to create your own tablemodel (e.g. by extending
DefaultTableModel) where you implement getColumnClass().
Note, that every table column that is specified to be of type String
will be rendered with your custom renderer [due to
table.setDefaultRenderer(String.class,...)].

Signature
Regards,
Roland de Ruiter
___ ___
/__/ w_/ /__/
/ \ /_/ / \
andy.dreistadt@gmail.com - 27 Jan 2005 15:47 GMT
Roland,
I made the necessary changes and it works now.
Thank you very much for your help,
Andy
> > Hi all,
> >
[quoted text clipped - 17 lines]
> Object.class for getColumnClass() [defined in its parentclass
> AbstractTableModel
<http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/AbstractTableModel.htm
l#getColumnClass(int)>],
> and therefore your custom renderer will not be invoked.
>
[quoted text clipped - 11 lines]
> /__/ w_/ /__/
> / \ /_/ / \