您的位置:首页 > 其它

Swing之JTable篇设置表格选中行的前景色和背景色

2011-11-19 19:16 387 查看
本身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 java.awt.Component;   
  
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);   
  
  }   
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: