OK. I have listed Cell renderer/Editor. Regarding Table freezing issue, I display two tables in One single dialog window. when I click on data rows in left Table , Right side table changes it value. It works fine in windows. But in Solaris, Right side table doesnt change value and also I am unable to select rows in it. Please let me know if you need any more details. Thanks
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.tree.*;
import java.awt.event.MouseEvent;
import java.util.EventObject;
abstract public class AbstractCellEditor implements TableCellEditor {
protected EventListenerList listenerList = new EventListenerList();
protected Object value;
protected ChangeEvent changeEvent = null;
protected int clickCountToStart = 1;
//------------------------------------------------------------------------------
public void addCellEditorListener(CellEditorListener l) {
listenerList.add(CellEditorListener.class, l);
}
//------------------------------------------------------------------------------
public void cancelCellEditing() {
fireEditingCanceled();
}
//------------------------------------------------------------------------------
protected void fireEditingCanceled() {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==CellEditorListener.class) {
if (changeEvent == null)
changeEvent = new ChangeEvent(this);
((CellEditorListener) listeners[i+1]).editingCanceled(changeEvent);
}
}
}
//------------------------------------------------------------------------------
protected void fireEditingStopped() {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i] == CellEditorListener.class) {
if (changeEvent == null)
changeEvent = new ChangeEvent(this);
((CellEditorListener) listeners[i+1]).editingStopped(changeEvent);
}
}
}
//------------------------------------------------------------------------------
public Object getCellEditorValue() {
return value;
}
//------------------------------------------------------------------------------
public int getClickCountToStart() {
return clickCountToStart;
}
//------------------------------------------------------------------------------
public boolean isCellEditable(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
if (((MouseEvent)anEvent).getClickCount() < clickCountToStart)
return false;
}
return true;
}
//------------------------------------------------------------------------------
public void removeCellEditorListener(CellEditorListener l) {
listenerList.remove(CellEditorListener.class, l);
}
//------------------------------------------------------------------------------
public void setCellEditorValue(Object value) {
this.value = value;
}
//------------------------------------------------------------------------------
public void setClickCountToStart(int count) {
clickCountToStart = count;
}
//------------------------------------------------------------------------------
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
//------------------------------------------------------------------------------
public boolean stopCellEditing() {
fireEditingStopped();
return true;
}
//------------------------------------------------------------------------------
}
BulbEditor.java
=========================================
public class BulbEditor extends AbstractCellEditor {
BulbRenderer renderer = new BulbRenderer();
public BulbEditor() {
renderer.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
setCellEditorValue(Boolean.TRUE);
fireEditingStopped();
}
});
}
});
}
//------------------------------------------------------------------------------
public Component getTableCellEditorComponent(
JTable table, Object value,
boolean isSelected,
int row, int col) {
return renderer.getTableCellRendererComponent(
table, value, true, true,
row, col);
}
//------------------------------------------------------------------------------
}
BulbRenderer.java
==========================================
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class BulbRenderer extends DefaultTableCellRenderer {
private ImageIcon darkBulb = null; //new ImageIcon("button.jpg")
private ImageIcon brightBulb = null; //new ImageIcon("button_lit.jpg");
//------------------------------------------------------------------------------
public BulbRenderer() {
setHorizontalAlignment(JLabel.CENTER);
}
//------------------------------------------------------------------------------
public BulbRenderer(ImageIcon darkBulb, ImageIcon brightBulb) {
setHorizontalAlignment(JLabel.CENTER);
this.darkBulb = darkBulb;
this.brightBulb = brightBulb;
}
//------------------------------------------------------------------------------
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected,
boolean hasFocus,
int row, int col) {
Boolean b = (Boolean)value;
setIcon(b.booleanValue() ? brightBulb : darkBulb);
return this;
}
//------------------------------------------------------------------------------
}