setvalueat defaulttablecellrenderer java swing jtable cellrenderer

defaulttablecellrenderer - jtable java mysql



Cell Renderer for JTable-filas de colores (3)

Simplemente quiero que cada fila se resalte en verde, amarillo o rojo dependiendo del valor de una variable separada (no se muestra en la tabla).

Los renderizadores trabajan en los datos de la tabla. Es decir, los componentes solo pueden pintarse cuando tienen toda la información necesaria para hacer el trabajo.

Entonces, de alguna manera, necesitas agregar la información a la mesa. Esto se puede hacer agregando una cuarta columna que está oculta. Entonces, la tabla todavía tiene acceso a la información requerida.

Entonces quizás puedas usar la sugerencia en Table Row Renderering .

He estado buscando una solución a esto y no puedo entender ni hacer cola desde varios lugares de cómo lograr que mi mesa haga filas de colores sin hacer mi propia pregunta.

De cada lugar que he visto, deduzco que necesito usar un procesador de células, pero el problema es que no sé cómo aplicarlo a mi propia situación.

Así que tengo una JTable simple con 3 columnas y simplemente quiero que cada fila se resalte en verde, amarillo o rojo dependiendo del valor de una variable separada (no se muestra en la tabla).

Parece que debería ser realmente simple, pero no sé cómo hacerlo. Si ayuda, mi tabla se define como:

studentTableModel = new DefaultTableModel(new Object[]{"Name", "StudentNo", "Part"}, 0); jt_studentTable = new JTable(studentTableModel); jt_studentTable.getColumnModel().getColumn(2).setPreferredWidth(10); studentTableModel.addRow(new Object[]{"(empty)", "(empty)", "(empty)"}); JScrollPane jsp_tableScroller = new JScrollPane(jt_studentTable); jsp_tableScroller.setPreferredSize(new Dimension(200,190)); middleCentrePanel.add(jsp_tableScroller);

Las filas de la tabla cambian según la selección de un cuadro combinado.

Gracias por adelantado.


Tal vez esto funcione para ti:

class MyCellRenderer extends DefaultTableCellRenderer { String separatedVariable; public MyCellRenderer(String separatedVariable) { this.separatedVariable = separatedVariable; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); c.setBackground(Color.WHITE); c.setForeground(Color.BLACK); JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); if (separatedVariable.equals("YOUR VALUE TO GREEN")) { l.setBackground(Color.GREEN); return l; } else { if (separatedValue.equals("YOUR VALUE TO YELLOW")) { l.setBackground(Color.YELLOW); return l; } else if (separatedValue.equals("YOUR VALUE TO RED")) { l.setBaground(Color.RED); return l; } } return c; } }


import java.awt.Color; import java.awt.Component; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class RowRendering { private static Object[] columnName = {"Yes", "No"}; private static Object[][] data = { {"Y", "N"}, {"N", "Y"}, {"Y", "N"} }; public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { JFrame frame = new JFrame(); JTable table = new JTable(data, columnName); table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer()); table.getColumnModel().getColumn(1).setCellRenderer(new CustomRenderer()); frame.add(new JScrollPane(table)); frame.setTitle("Rendering in JTable"); frame.pack(); frame.setVisible(true); } }; EventQueue.invokeLater(r); } } class CustomRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 6703872492730589499L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if(row == 0){ cellComponent.setBackground(Color.YELLOW); } else if ( row == 1){ cellComponent.setBackground(Color.GRAY); } else { cellComponent.setBackground(Color.CYAN); } return cellComponent; } }