How to change the color of particular cell in JXTreeTable dynamically

邮差的信 提交于 2019-12-04 02:17:53

问题


I am using JXTreeTable for making treetable structure now I want to change the color of specific cell dynamically. How can I change the color of cell?

I found this code to change the color, but this is not working.

Here is Code:

leftTree.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {

     public Component getTableCellRendererComponent(JTable table, Object value,
          boolean isSelected, boolean hasFocus, int row, int column) {
     Component c = super.getTableCellRendererComponent(table, value, 
          isSelected, hasFocus, row, column);          
      if(Integer.parseInt(rowvalue[0])==row && column==0) {
         c.setBackground(Color.red);
      }
        return c;
      }
});

回答1:


Use highlighters.

addHighlighter(new ColorHighlighter());



回答2:


If the cell contains text with the name of the color then it would be possible to modify the value.

import java.awt.Color;
import java.awt.Component;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;

public class MainClass extends JFrame {
  ColorName colors[] = { new ColorName("Red"), new ColorName("Green"), new ColorName("Blue"),
      new ColorName("Black"), new ColorName("White") };

  public MainClass() {
    super("Table With DefaultCellEditor Example");
    setSize(500, 300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    JTable table = new JTable(new AbstractTableModel() {
      ColorName data[] = { colors[0], colors[1], colors[2], colors[3], colors[4], colors[0],
          colors[1], colors[2], colors[3], colors[4] };

      public int getColumnCount() {
        return 3;
      }

      public int getRowCount() {
        return 10;
      }

      public Object getValueAt(int r, int c) {
        switch (c) {
        case 0:
          return (r + 1) + ".";
        case 1:
          return "Some pithy quote #" + r;
        case 2:
          return data[r];
        }
        return "Bad Column";
      }

      public Class getColumnClass(int c) {
        if (c == 2)
          return ColorName.class;
        return String.class;
      }

      public boolean isCellEditable(int r, int c) {
        return c == 2;
      }

      public void setValueAt(Object value, int r, int c) {
        data[r] = (ColorName) value;
      }
    });

    table.setDefaultEditor(ColorName.class, new DefaultCellEditor(new JComboBox(colors)));
    table.setDefaultRenderer(ColorName.class, new TableCellRenderer());
    table.setRowHeight(20);
    getContentPane().add(new JScrollPane(table));
  }

  public static void main(String args[]) {
    MainClass ex = new MainClass();
    ex.setVisible(true);
  }

  public class ColorName {
    String cname;

    public ColorName(String name) {
      cname = name;
    }

    public String toString() {
      return cname;
    }
  }

  public class TableCellRenderer extends DefaultTableCellRenderer {

    public Component getTableCellRendererComponent(
       JTable table, Object value, 
       boolean isSelected, boolean hasFocus, 
       int row, int col)  
    {
       // get the DefaultCellRenderer to give you the basic component
       Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
       // apply your rules
       if (value.toString().equals("Red"))
          c.setBackground(Color.RED);
       else  
          c.setBackground(Color.GRAY);
       return c;
    }
 }
}


来源:https://stackoverflow.com/questions/12107545/how-to-change-the-color-of-particular-cell-in-jxtreetable-dynamically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!