着色jTable行

我想为jTable中的特定行着色..我使用此代码为列做了,

private class CustomCellRenderer extends DefaultTableCellRenderer { /* (non-Javadoc) * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int) */ @Override public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) { Component rendererComp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus,row, column); //Set foreground color // rendererComp.setForeground(Color.red); //Set background color rendererComp .setBackground(Color.pink); return rendererComp ; } } 

我用上面的代码调用,

  jTable1.getColumnModel().getColumn(3).setCellRenderer(new CustomCellRenderer()); 

但是我想对jTable中的行做同样的事情。在行的情况下没有getColumnModel()或getColumn()。那么这样做的替代方法是什么? 我是通过使用Java Swing在Netbeans中完成的。

下面是一个关于如何组合列颜色和行颜色的示例。 您基本上在TableCellRenderer中执行测试,以查看背景是否应该是一种颜色或另一种颜色。

 import java.awt.Color; import java.awt.Component; import java.util.Enumeration; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; public class TestTable { public class MyTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setBackground(null); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setText(String.valueOf(value)); boolean interestingRow = row % 5 == 2; boolean secondColumn = column == 1; if (interestingRow && secondColumn) { setBackground(Color.ORANGE); } else if (interestingRow) { setBackground(Color.YELLOW); } else if (secondColumn) { setBackground(Color.RED); } return this; } } private JFrame f; private JTable table; protected void initUI() { Vector> data = new Vector>(); Vector columNames = new Vector(); columNames.add("Col 0"); columNames.add("Col 1"); columNames.add("Col 2"); for (int i = 0; i < 20; i++) { Vector v = new Vector(); v.add(i % 3 == 0 ? "Hello" : "World"); v.add("Some data in row " + (i + 1)); v.add("Some other data in row " + (i + 1)); data.add(v); } table = new JTable(new DefaultTableModel(data, columNames)); Enumeration en = table.getColumnModel().getColumns(); while (en.hasMoreElements()) { TableColumn tc = en.nextElement(); tc.setCellRenderer(new MyTableCellRenderer()); } f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); f.add(new JScrollPane(table)); f.pack(); f.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new TestTable().initUI(); } }); } } 

由于您想要更改整个行,无论列类如何,请考虑重写prepareRenderer() ,如此处所述。 TableCellRendererprepareRenderer()方法在这里进行了对比。

这似乎是处理它的一种非常脏的方式。 如果你使用layoutManager for gridinter使用gridLayout(我认为它必须是一个JFrame),这将是一个更好的主意。 你可以添加单独的组件(JPanels,Jbuttons或任何其他JComponent)并使用paint()/ repaint()方法处理它们的外观。

编辑

或者您可以根据int rows,int列(作为参数提供),使用嵌套的if-else语句或switch-case来更改getTableCellRendererComponent(….)方法以设置自定义背景颜色。

这会容易得多