Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / GUI / January 2005

Tip: Looking for answers? Try searching our database.

JTable row color rendering problem

Thread view: 
andy.dreistadt@gmail.com - 27 Jan 2005 14:44 GMT
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_/ /__/
> /  \ /_/ /  \


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.