how color the minimum value cell on JTable?

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



how color the minimum value cell on JTable?



I am developing a small application on Java. I created a custom model for jtable. The model is this:


package tienda.funcionalidad;

import java.awt.Component;
import java.util.ArrayList;

import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;

import tienda.funcionalidad.excepciones.NombreNoValidoException;
import tienda.funcionalidad.excepciones.PrecioNoValidoException;
import tienda.funcionalidad.excepciones.ProductoNoExisteException;

public class ProductTableModel extends AbstractTableModel implements TableCellRenderer

/**
*
*/
private static final long serialVersionUID = 1L;
final String columns = "Producto", "Serodys", "Ramírez", "Entrada", "MercaSur" ;
final ArrayList registros = GestionTienda.getProductos();

@Override
public int getColumnCount()
return columns.length;


@Override
public String getColumnName(int column)
return columns[column];


@Override
public int getRowCount()
if (registros.isEmpty())
return 0;
return registros.size();


@Override
public Object getValueAt(int rowIndex, int columnIndex)
Product product = (Product) registros.get(rowIndex);
switch (columnIndex)
case 0:
return product.getName();
case 1:
return product.getPriceSerodys();
case 2:
return product.getPriceRamirez();
case 3:
return product.getPriceEntrada();
case 4:
return product.getPriceMercasur();

return null;


public boolean isCellEditable(int row, int col)
return true;


public Class getColumnClass(int col)
switch (col)
case 0: // Name
return String.class;
case 1: // value
return Double.class;
case 2: // location
return Double.class;
case 3: // quantity
return Double.class;
case 4:
return Double.class;

return null;


public void setValueAt(Object value, int row, int col)
try
Product product = (Product) registros.get(row);
switch (col)
case 0: // Name
product.setName(value.toString());
break;
case 1: // value
Double priceSerodys = (Double) value;
product.setPriceSerodys(priceSerodys);
break;
case 2: // location
Double priceRamirez = (Double) value;
product.setPriceRamirez(priceRamirez);
break;
case 3: // quantity
Double priceEntrada = (Double) value;
product.setPriceEntrada(priceEntrada);
break;
case 4: // quantity
Double priceMercasur = (Double) value;
product.setPriceMercasur(priceMercasur);
break;

catch (NombreNoValidoException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (PrecioNoValidoException e)
// TODO Auto-generated catch block
e.printStackTrace();



@Override
public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4,
int arg5)

return null;





And the class Product is this:


package tienda.funcionalidad;

import java.io.Serializable;

import tienda.funcionalidad.excepciones.NombreNoValidoException;
import tienda.funcionalidad.excepciones.PrecioNoValidoException;

public class Product implements Serializable

/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String name;
private double priceSerodys;
private double priceRamirez;
private double priceEntrada;
private double priceMercasur;
private double priceAux = 0;


public Product(int id,String name, double priceSerodys, double priceRamirez, double priceEntrada, double priceMercasur) throws PrecioNoValidoException, NombreNoValidoException
setName(name);
setPriceSerodys(priceSerodys);
setPriceRamirez(priceRamirez);
setPriceEntrada(priceEntrada);
setPriceMercasur(priceMercasur);
setId(id);


public Product(int id,String nombre) throws NombreNoValidoException
setName(nombre);
setId(id);


public void setId(int id)
this.id = id;


public int getId()
return id;


protected void setPriceSerodys(Double priceSerodys) throws PrecioNoValidoException
if(priceSerodys<0)
throw new PrecioNoValidoException("Debes introducir un precio superior a 0");
this.priceSerodys=priceSerodys;


public double getPriceSerodys()
return priceSerodys;


protected void setPriceRamirez(Double priceRamirez) throws PrecioNoValidoException
if(priceRamirez<0)
throw new PrecioNoValidoException("Debes introducir un precio superior a 0");
this.priceRamirez=priceRamirez;


public double getPriceRamirez()
return priceRamirez;


protected void setPriceEntrada(Double priceEntrada) throws PrecioNoValidoException
if(priceEntrada<0)
throw new PrecioNoValidoException("Debes introducir un precio superior a 0");
this.priceEntrada=priceEntrada;


public double getPriceEntrada()
return priceEntrada;


protected void setPriceMercasur(Double priceMercasur) throws PrecioNoValidoException
if(priceMercasur<0)
throw new PrecioNoValidoException("Debes introducir un precio superior a 0");
this.priceMercasur=priceMercasur;


public double getPriceMercasur()
return priceMercasur;


protected void setName(String nombre) throws NombreNoValidoException nombre==null)
throw new NombreNoValidoException("Debes introducir un nombre para el producto");
this.name=nombre;


public String getName()
return name;


public double getPrecio()
return priceSerodys;


@Override
public String toString()
return getName();


@Override
public int hashCode()
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;


@Override
public boolean equals(Object obj)
if (this == obj)
return true;

if (obj == null)
return false;

if (getClass() != obj.getClass())
return false;

Product other = (Product) obj;
if (name == null)
if (other.name != null)
return false;

else if (!name.equals(other.name))
return false;

return true;







I need color the cell with the minimun value of each row with green and grey the other values. I am not idea how i have to codify the method getTableCellRendererComponent, can someone help me?
Sorry if my english is bad, i am spanish.
Thank you.




1 Answer
1



To achieve the result your are looking for, you can override the JTable prepareRenderer method.
Please refer the code below. This is just an example code and doesn't follow the java coding standard.
Left that work for you :)


JTable table = new JTable(new ProductTableModel())
@Override
public Component prepareRenderer(TableCellRenderer renderer, int rowIndex,
int columnIndex)

JComponent component = (JComponent) super.prepareRenderer(renderer, rowIndex, columnIndex);

int columnCount = getColumnCount();

if(columnIndex != 0)

double firstVal = Double.parseDouble(getValueAt(rowIndex, 1).toString());
for (int i = 2; i < columnCount; i++)
Double cellValue = Double.valueOf(getValueAt(rowIndex, i).toString());
if(cellValue < firstVal )
firstVal = cellValue;



if(firstVal == Double.valueOf(getValueAt(rowIndex, columnIndex).toString()).doubleValue())
component.setBackground(Color.GREEN);
else
component.setBackground(Color.GRAY);



return component;

;





Tkan you men, this code is useful. Now, i try code it in my code.
– Mario
Aug 10 at 19:42





Did it work for you ?
– Shahid Raza
Aug 18 at 10:44





Yes, thanks you!
– Mario
Aug 20 at 19:59






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Firebase Auth - with Email and Password - Check user already registered

Dynamically update html content plain JS

How to determine optimal route across keyboard