validar usar una sirve setvalueat seleccionar segun que poner pintar para las getrowcount filas fila condicion como color celda java swing netbeans jtable

usar - ¿Cómo establecer el color en una determinada fila si se cumplen ciertas condiciones usando java?



setvalueat jtable java (3)

... descrito en hilos y respuestas anteriores, solo ejemplo

del 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); } }); } }

Tengo A jtable. (tablesummary). una de sus columnas es CADUCIDAD. Quiero resaltar la fila con el cliente cuya fecha de vencimiento ya ha caducado en la fecha actual.

Ya tengo la lógica, pero no puedo hacer que la fila se vuelva roja o de cualquier otro color. aquí está mi 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<=tableSummary.getRowCount()-1; i++){ String nnn= tableSummary.getModel().getValueAt(i, 6).toString(); System.out.println(nnn); int res = nnn.compareTo(expDateString); if(res>=0){ System.out.println("if ni " + (res>=0)); } else{ System.out.println("else ni" + (res>=0)); rowrenderer.setBackground(Color.RED); } }

¿Puede alguien ayudarme con esto? porque es uno de los aspectos más destacados de mi interfaz. Gracias por adelantado !! :)


En el siguiente enlace, puede encontrar un ejemplo de la acción que desea hacer: http://www.roseindia.net/java/example/java/swing/SadingRows.shtml

prepareRenderer() sobrescribir prepareRenderer() en JTable y agregar el backgroundColor en el Component que se devuelve.

PD: para referencia futura, sería más fácil si incluyera más código. La definición de tu rowrenderer =)

EDITAR

En lugar de su JTable table = new JTable(model) normal JTable table = new JTable(model) declaración JTable table = new JTable(model) , use lo siguiente (cambie la lógica en el método prepareRenderer si quiere algo más que un color alternativo):

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; } };


la clase pública TablePrepareRenderer extiende 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); } }); }

}