I'm clarifying my earlier problem by providing some sample code
import java.awt.Color;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TestTable extends javax.swing.JFrame
{
private JButton jButton1;
private JScrollPane jScrollPane1;
private JTable jTable1;
public TestTable()
{
initComponents();
}
private void initComponents(){
///////////////////////////////////////////////
//Initializing components
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
String data[][] = { {"A","B","C"},
{"R","S","T"},
{"U","V","W"}
};
String col[] = {"X","Y","Z"};
jTable1 = new JTable(new DefaultTableModel(data, col));
jScrollPane1.setViewportView(jTable1);
jButton1.setText("jButton1");
///////////////////////////////////////////////
//positioning button and table
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(15, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jButton1)
.addGap(160, 160, 160))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(47, 47, 47)
.addComponent(jButton1)
.addContainerGap(102, Short.MAX_VALUE))
);
///////////////////////////////////////////////
//create event callback for the button
jButton1.setText("Change data & color");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
///////////////////////////////////////////////
pack();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//change the data in the table
String data[][] = { {"a","b","c"},
{"r","s","t"},
{"u","v","w"} };
String col[] = {"x","y","z"};
DefaultTableModel model= new DefaultTableModel(data,col);
jTable1.setModel(model);
//change the header in the table
jTable1.getTableHeader().setBackground(Color.red);
// IS IT POSSIBLE TO INSERT CODE HERE, WITHOUT REINITIALIZING jTable1,
// SO THAT CLICKING THE BUTTON WILL TURN THE MIDDLE ROW GREEN?
//change button text
jButton1.setText("Changed");
}
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TestTable().setVisible(true);
}
});
}
}
I've been able to change the colors of the rows when I run TestTable in main, but I am having problems with changing the rows colors from within a callback (as above). My guess was to insert code like
jTable1.getCellRenderer(0, 0).getTableCellRendererComponent(jTable1, String.class, false,false, 0,0).setBackground(Color.green);
Since I am specifying entry (0,0) of the table in this code, I would expect that this code would turn entry (0,0), however, this turns the entire table green! Note, I can change the data in the model and the color of the header without any problems.
Any help sincerely appreciated. Thanks Chris