Estoy trabajando con netbeans IDE7.4, voy a añadir filas a la JTable en tiempo de ejecución y ahora quiero establecer el color de fondo de una fila en particular.

Ahora el problema es que cuando el valor de la fila y se cambia el color de la fila en particular no se cambia y cuando me desplácese hacia arriba o hacia abajo en la tabla se aplican los cambios.

Cómo actualizar la tabla en tiempo de ejecución? Cómo establecer el color de fondo de la fila en particular en tiempo de ejecución?

Esta es la clase de procesador estoy utilizando para colorear fila en particular:

public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer
    {         
public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected,     boolean hasFocus, int row, int column)
   {
   final java.awt.Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,        column);

     Object val=table.getValueAt(row, 2);
     String sval=val.toString();
     sval=sval.replaceAll(":","");
     int ival=Integer.parseInt(sval);
  if(ival==0) 
    {  
        cellComponent.setForeground(Color.black);          
        cellComponent.setBackground(Color.red);              

    }      
    else  
    {      
        cellComponent.setBackground(Color.white);      
        cellComponent.setForeground(Color.black);      
    }    
    if (isSelected)
   {
    cellComponent.setForeground(table.getSelectionForeground());                             cellComponent.setBackground(table.getSelectionBackground());
   }


      return cellComponent;

 }


 }

y estoy asignando a jtable como este :

    newViewTable.setDefaultRenderer(Object.class,new MyCellRenderer());

newViewTable es el nombre de JTable.

  • Puede usted proporcionar un ejecutable ejemplo que demuestra su problema?
  • Para una mejor ayuda antes, publicar un MCTaRE (Mínimo Completa Probado y Legible por Ejemplo).
  • Consulte esta respuesta
  • ¿Cómo está la actualización de la tabla/modelo (para que cambie la celda de representación de características)?
  • ¿Por qué no sigue los consejos que te ofrecen y después de una MCTaRE más bien que mal formateado (ilegible) de código que no se ejecuta y por lo tanto es un ejemplo de nada?
InformationsquelleAutor user3331894 | 2014-03-20

2 Comentarios

  1. 1

    En algún punto, usted necesita decirle a la mesa que el contenido ha cambiado de alguna manera.

    Si usted está usando un TableModel basado en AbstractTableModel, puede utilizar el fireTableXxx eventos, por ejemplo fireTableCellUpdate(row, col). Esto informará a la JTable que el modelo ha cambiado y provocar que se vuelva a pintar la mesa…

    Usted puede desear considerar el uso de fireTablesRowsUpdated ya que esto hará que el JTable de actualizar toda la fila.

    Si usted está usando setValueAt en el modelo para cambiar el valor, será necesario llamar a la adecuada desencadenador de eventos…

    Actualizado con el funcionamiento de ejemplo

    Así que, basada en las MyCellRenderer representador, hice este ejemplo, y funciona bien…

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.table.DefaultTableModel;
    public class TestTable {
    public static void main(String[] args) {
    new TestTable();
    }
    public TestTable() {
    EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
    }
    final DefaultTableModel model = new DefaultTableModel(
    new Object[]{"A", "B", "C"}, 
    0
    );
    model.addRow(new Object[]{"A", "B", "1"});
    model.addRow(new Object[]{"C", "D", "0"});
    model.addRow(new Object[]{"E", "F", "1"});
    model.addRow(new Object[]{"G", "H", "0"});
    JTable table = new JTable(model);
    table.setDefaultRenderer(Object.class, new MyCellRenderer());
    JButton btn = new JButton("Add");
    btn.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    model.addRow(new Object[]{"N", "O", (int)(Math.round(Math.random() * 1))});
    }
    });
    JFrame frame = new JFrame("Testing");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());
    frame.add(new JScrollPane(table));
    frame.add(btn, BorderLayout.SOUTH);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    });
    }
    public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer {
    public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    final java.awt.Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    Object val = table.getValueAt(row, 2);
    String sval = val.toString();
    sval = sval.replaceAll(":", "");
    int ival = Integer.parseInt(sval);
    if (ival == 0) {
    cellComponent.setForeground(Color.black);
    cellComponent.setBackground(Color.red);
    } else {
    cellComponent.setBackground(Color.white);
    cellComponent.setForeground(Color.black);
    }
    if (isSelected) {
    cellComponent.setForeground(table.getSelectionForeground());
    cellComponent.setBackground(table.getSelectionBackground());
    }
    return cellComponent;
    }
    }
    }

    La pregunta ahora es, ¿qué estás haciendo de manera diferente??

    • yo estoy usando el DefaultTableModel….
    • ¿Cómo se va a actualizar el estado de la fila?
    • mediante el uso de método addRow de defaultTableModel..
    • Realmente va a necesitar ver a un ejecutable ejemplo que demuestra su problema…
    • no puedo publicar el código fuente completo….Es demasiado grande…
    • A continuación, hacer uno que se ajuste a…
    • «no puedo publicar el código fuente completo» tenga en cuenta que ‘todo el código fuente’ != MCTaRE o ‘ejecutables ejemplo’. Nadie sugirió que publique el código fuente completo.
    • Mi Problema es solucionado…he utilizado fireTabledatachanged..Gracias por su respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here