具体一些,从数据库里获得的表,已经按照“部门”排列好了,如何做到 相同部门的行同一种颜色,相邻不同部门用不同的颜色呢?网上都是设置某个单元格的颜色,如何设置符合条件的整行的颜色呢?各位高手要帮忙啊。谢谢各位!

解决方案 »

  1. 通过TableCellRenderer来改变颜色,细到每个单元格都可以改变,改变一行也是同样道理import java.awt.Color;
    import java.awt.Component;
    import java.util.HashMap;import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    public class ColorTableCellRenderer extends DefaultTableCellRenderer { private HashMap<String, Color>nameToColor;
    private int partmentColumn;

    /**
     * 构造函数传入“部门”的列序
     * @param partmentColumn
     */
    public ColorTableCellRenderer(int partmentColumn) {
    this.partmentColumn=partmentColumn;
    nameToColor=new HashMap<String, Color>();
    nameToColor.put("人力资源", Color.BLUE);
    nameToColor.put("技术部", Color.LIGHT_GRAY);
    nameToColor.put("销售部", Color.RED);
    //添加 部门与相应颜色对应颜色
    //如果你要的效果是不固定的,可以循环使用几种颜色,
    //只需要记录上一次的部门不等于这次的部门就改变颜色
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    Object partment=table.getValueAt(row, partmentColumn);
    Color color = nameToColor.get(partment);
    if(color!=null) {
    setBackground(color);
    }
    return this;
    }}用法应该会了吧?
    table.setCellRenderer(...)
    或者
    table.setDefaultCellRenderer(...)
      

  2. 看看吧,应该有点用。import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;public class tabChange implements MouseListener {
    JFrame f; JPanel panel1; JTable tab; Object[][] rowData = { { "1", "a", "aa" }, { "2", "b", "bb" },
    { "3", "c", "cc" }, { "1", "a", "aa" }, { "2", "b", "bb" },
    { "3", "c", "cc" } }; Object[] colName = { "num", "item1", "item2" }; public tabChange() {
    f = new JFrame("");
    panel1 = new JPanel();
    panel1.setPreferredSize(new Dimension(300, 200));
    tab = new JTable(rowData, colName);
    tab.addMouseListener(this);
    tab.setDefaultRenderer(Object.class, new TableRenderer());
    panel1.add(tab);
    f.add(panel1, BorderLayout.NORTH);
    f.pack();
    f.setVisible(true);
    f.setResizable(true);
    } public static void main(String[] args) {
    new tabChange();
    } public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub
    tab.setSelectionBackground(Color.blue); System.out.println(tab.getSelectedColumns().length); } public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub } public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub } public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub } public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub }
    }class TableRenderer extends DefaultTableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value,
    boolean isSelected, boolean hasFocus, int row, int column) {
    if (column > 0) {
    super.getTableCellRendererComponent(table, value, isSelected,
    hasFocus, row, column);
    return this;
    }
    for (int i = 0; i < table.getColumnCount(); i++) {
    if (value.equals("1")) {
    super.setBackground(Color.RED);
    super.getTableCellRendererComponent(table, value, isSelected,
    hasFocus, row, i);
    } else if (value.equals("2")) {
    super.setBackground(Color.BLUE);
    super.getTableCellRendererComponent(table, value, isSelected,
    hasFocus, row, i);
    } else {
    super.setBackground(Color.GREEN);
    super.getTableCellRendererComponent(table, value, isSelected,
    hasFocus, row, i);
    }
    }
    return this;
    }}
      

  3. Kylixs(歌声中飘舞的星)提供的是不错的方法
      

  4. 重写绘制器,但是Kylixs(歌声中飘舞的星)提供的方法有点呆板。
      

类似问题 »