着色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
由于您想要更改整个行,无论列类如何,请考虑重写prepareRenderer()
,如此处所述。 TableCellRenderer
和prepareRenderer()
方法在这里进行了对比。
这似乎是处理它的一种非常脏的方式。 如果你使用layoutManager for gridinter使用gridLayout(我认为它必须是一个JFrame),这将是一个更好的主意。 你可以添加单独的组件(JPanels,Jbuttons或任何其他JComponent)并使用paint()/ repaint()方法处理它们的外观。
编辑
或者您可以根据int rows,int列(作为参数提供),使用嵌套的if-else语句或switch-case来更改getTableCellRendererComponent(….)方法以设置自定义背景颜色。
这会容易得多