How to change the color of particular cell in JXTreeTable dynamically

前端 未结 2 1574
[愿得一人]
[愿得一人] 2021-01-16 13:55

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?

2条回答
  •  有刺的猬
    2021-01-16 14:16

    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;
        }
     }
    }
    

提交回复
热议问题