Como definir a cor para uma determinada linha se determinadas condições forem atendidas usando java?

Eu tenho um jtable. (tabelas). uma de sua coluna é EXPIRY. Eu quero destacar a linha com o cliente cuja data de expiração já expirou na data atual ..

Eu já tenho a lógica, mas não consigo fazer a linha ficar vermelha ou qualquer outra cor. aqui está meu código:

int count = (tableSummary.getRowCount()); NumberFormat formatter = new DecimalFormat("###,###"); String no = formatter.format(count); txtNo.setText(no); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); String expDateString = sdf.format(cal.getTime()).toString(); for(int i=0; i=0){ System.out.println("if ni " + (res>=0)); } else{ System.out.println("else ni" + (res>=0)); rowrenderer.setBackground(Color.RED); } } 

Alguém pode me ajudar com isso? porque é um dos principais destaques da minha interface. Desde já, obrigado !! 🙂

No link a seguir, você pode encontrar um exemplo da ação que deseja fazer: http://www.roseindia.net/java/example/java/swing/SadingRows.shtml

Você precisa sobrescrever prepareRenderer() em JTable e adicionar o backgroundColor no Component que é retornado.

PS: para referência futura, seria mais fácil se você incluísse mais código. A definição do seu rowrenderer =)

EDITAR

Em vez de sua JTable table = new JTable(model) normal JTable table = new JTable(model) declaração JTable table = new JTable(model) , use o seguinte (altere a lógica no método prepareRenderer se desejar algo diferente de uma cor alternada):

 JTable table = new JTable(model) { public Component prepareRenderer(TableCellRenderer renderer, int Index_row, int Index_col) { // get the current row Component comp = super.prepareRenderer(renderer, Index_row, Index_col); // even index, not selected if (Index_row % 2 == 0 && !isCellSelected(Index_row, Index_col)) { comp.setBackground(Color.lightGray); } else { comp.setBackground(Color.white); } return comp; } }; 

… descrito nos tópicos e respostas anteriores, apenas exemplo

insira a descrição da imagem aqui

do código

 import java.awt.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import javax.swing.border.LineBorder; import javax.swing.table.*; public class TablePrepareRenderer extends JFrame { private static final long serialVersionUID = 1L; private JTable table; private Date maturityDate = new Date(); private Date todayDate = new Date(); private SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); private Date tableDate = new Date(); private String strDate = ""; private Date modifDate = new Date(); private Calendar cal; public TablePrepareRenderer() { Object[] columnNames = {"Type", "Company", "Shares", "Price", "Date"}; Object[][] data = { {"Buy", "IBM", new Integer(1000), new Double(80.50), new Date()}, {"Sell", "MicroSoft", new Integer(2000), new Double(6.25), new Date()}, {"Sell", "Apple", new Integer(3000), new Double(7.35), new Date()}, {"Buy", "Nortel", new Integer(4000), new Double(20.00), new Date()} }; DefaultTableModel model = new DefaultTableModel(data, columnNames) { private static final long serialVersionUID = 1L; @Override public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; table = new JTable(model) { private static final long serialVersionUID = 1L; @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); /*int firstRow = 0; int lastRow = table.getRowCount() - 1; if (row == lastRow) { ((JComponent) c).setBackground(Color.red); } else if (row == firstRow) { ((JComponent) c).setBackground(Color.blue); } else { ((JComponent) c).setBackground(table.getBackground()); }*/ if (!isRowSelected(row)) { if (table.getColumnCount() >= 0) { String type = (String) getModel().getValueAt(row, 0); c.setBackground("Buy".equals(type) ? Color.YELLOW : Color.GREEN); // maturityDate = new Date(); todayDate = new Date(); strDate = sdf.format(todayDate); try { todayDate = sdf.parse(strDate); } catch (ParseException ex) { Logger.getLogger(TablePrepareRenderer.class.getName()).log(Level.SEVERE, null, ex); } tableDate = (Date) table.getValueAt(row, 4); strDate = sdf.format(tableDate); if (strDate != null) { if (!strDate.isEmpty()) { try { maturityDate = sdf.parse(strDate); } catch (ParseException ex) { Logger.getLogger(TablePrepareRenderer.class.getName()).log(Level.SEVERE, null, ex); } if (maturityDate != null) { int mmDiffDealToValue = (maturityDate).compareTo(todayDate); if (((mmDiffDealToValue < 0))) { c.setBackground(Color.orange); c.setFont(new Font("Serif", Font.BOLD, 12)); } } } } // } } if (isRowSelected(row) && isColumnSelected(column)) { ((JComponent) c).setBorder(new LineBorder(Color.red)); } return c; } }; modifyDateInTable(); table.setPreferredScrollableViewportSize(table.getPreferredSize()); JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane); } private void modifyDateInTable() { Calendar c = Calendar.getInstance(); c.setTime(modifDate); c.add(Calendar.DATE, - 1); modifDate = c.getTime(); table.setValueAt(modifDate, 0, 4); c.setTime(modifDate); c.add(Calendar.DATE, +5); modifDate = c.getTime(); table.setValueAt(modifDate, 1, 4); c.setTime(modifDate); c.add(Calendar.DATE, +1); modifDate = c.getTime(); table.setValueAt(modifDate, 1, 4); c.setTime(modifDate); c.add(Calendar.DATE, - 16); modifDate = c.getTime(); table.setValueAt(modifDate, 3, 4); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TablePrepareRenderer frame = new TablePrepareRenderer(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.pack(); frame.setLocation(150, 150); frame.setVisible(true); } }); } } 

insira a descrição da imagem aqui

class pública TablePrepareRenderer estende JFrame {

 private JTable table; public TablePrepareRenderer() { Object[] columnNames = { "Type", "Company", "Name", "Salery", "Designation" }; Object[][] data = { { "Probation", "Digital Research Lab", "Kamran Ali", "500,000", "Java Developer" }, { "Permenent", "Netsole", "Farhan Khan", "80,000", "System Administaror" }, { "Contract", "System Limited", "Danyal", "100,000", "Network Administrator" }, { "Probation", "TeraData", "Ali Raza", "45,000", "IT Officer" }, { "Contract", "MicroSoft", "Sikandar Hayat", "450,000", "Team Lead" }, { "Permenent", "MicroSoft", "Adnan", "30,000", "Driver" }, }; DefaultTableModel model = new DefaultTableModel(data, columnNames) { @Override public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; table = new JTable(model) { @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); if (!isRowSelected(row)) { if (table.getColumnCount() >= 0) { String type = (String)getModel().getValueAt(row, 0); if (type.equalsIgnoreCase("Probation")) { c.setBackground(new Color(198, 190, 255)); } if (type.equalsIgnoreCase("Permenent")) { c.setBackground(new Color(14, 255, 190)); } if (type.equalsIgnoreCase("Contract")) { c.setBackground(Color.green); } } } if (isRowSelected(row) && isColumnSelected(column)) { ((JComponent)c).setBorder(new LineBorder(Color.red)); } return c; } }; table.setPreferredScrollableViewportSize(table.getPreferredSize()); JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TablePrepareRenderer frame = new TablePrepareRenderer(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.pack(); frame.setLocation(150, 150); frame.setSize(800, 500); frame.setVisible(true); } }); } 

}