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