本身JTable没有方法可以直接设置选择行的前景色和背景色,但是我们可以通过从写TableCellRenderer这个接口来实现我们需要的功能。此接口定义了要成为 JTable 中单元格渲染器的任意对象所需的方法。
我们通过重写
getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
返回用于绘制单元格的组件。
table - 要求渲染器绘制的 JTable;可以为 null
value - 要呈现的单元格的值。由具体的渲染器解释和绘制该值。例如,如果 value 是字符串 "true",则它可呈现为字符串,或者也可呈现为已选中的复选框。null 是有效值
isSelected - 如果使用选中样式的突出显示来呈现该单元格,则为 true;否则为 false
hasFocus - 如果为 true,则适当地呈现单元格。例如,在单元格上放入特殊的边框,如果可以编辑该单元格,则以彩色呈现它,用于指示正在进行编辑
row - 要绘制的单元格的行索引。绘制头时,row 值是 -1
column - 要绘制的单元格的列索引
来实现。
import java.awt.BorderLayout; import java.awt.Color; import ponent; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; class EvenOddRenderer implements TableCellRenderer { public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); Color foreground, background; if (isSelected) { foreground = Color.YELLOW; background = Color.GREEN; } else { if (row % 2 == 0) { foreground = Color.BLUE; background = Color.WHITE; } else { foreground = Color.WHITE; background = Color.BLUE; } } renderer.setForeground(foreground); renderer.setBackground(background); return renderer; } } public class ResizeTable { public static void main(String args[]) { final Object rowData[][] = { { "1", "one", "I" }, { "2", "two", "II" }, { "3", "three", "III" }}; final String columnNames[] = { "#", "English", "Roman" }; final JTable table = new JTable(rowData, columnNames); JScrollPane scrollPane = new JScrollPane(table); table.setDefaultRenderer(Object.class,new EvenOddRenderer()); JFrame frame = new JFrame("Resizing Table"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); } }
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!/jiangjunshow
如果觉得《Swing之JTable篇设置表格选中行的前景色和背景色》对你有帮助,请点赞、收藏,并留下你的观点哦!