【问题标题】:How maintain my personal color row in a jtable如何在 jtable 中维护我的个人颜色行
【发布时间】:2015-09-06 10:41:36
【问题描述】:

我想为行创建一个具有个人不同背景颜色的 jtable。 我写了代码,但我有一个问题,如果我选择行或滚动表格,我的个人颜色配置会丢失。

谢谢大家

这是我的代码

private void go(){

    DefaultTableModel dm = (DefaultTableModel)jtLav.getModel();
    dm.getDataVector().removeAllElements();

    String s_sql = "query";

    try{
        ConnessionePG con = new ConnessionePG("tifas");
        Vector v_res = con.getResult(s_sql);
        con.close();

        Vector v_last_pos = new Vector();
        Vector v_first_pos = new Vector();

        String s_car_prec = "";     
        int i_count_col = 0;

        for (int i = 0; i < v_res.size(); i++){
            Hashtable ht = (Hashtable) v_res.get(i);
            String s_car_att = (String) ht.get("carica");

            if (i == 0){
                v_first_pos.add(i);
            }
            else if (s_car_att.equals(s_car_prec) == false){
                v_last_pos.add(i-1);
                v_first_pos.add(i);
            }


            if (i == v_res.size() - 1){
                v_last_pos.add(i);
            }
            s_car_prec = s_car_att;
        }


        for (int i = 0; i < v_res.size(); i++){
            TableColumn tc = new TableColumn();
            tc.setCellRenderer(new MyTableCellRenderer(v_last_pos));

            Hashtable ht = (Hashtable) v_res.get(i);
            System.out.println((String)ht.get("fine"));

            // dati da inserire

            Object o_indice_col = v_first_pos.get(i_count_col);
            int i_indice_col = (int) o_indice_col;



            if (i_indice_col == i){
                i_count_col++;
                ....
            }

            dm.addRow(new Object[]{...
                });
        }

        Enumeration<TableColumn> en = jtLav.getColumnModel().getColumns();
        while (en.hasMoreElements()) {
            TableColumn tc = en.nextElement();  
            tc.setCellRenderer(new MyTableCellRenderer(v_last_pos));
        }

     }
    catch(SQLException e){

    }
}

public class MyTableCellRenderer extends DefaultTableCellRenderer implements     TableCellRenderer {

    public MyTableCellRenderer(Vector v){
        v_pos_col = v;
        System.out.println(v_pos_col);


    }
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        setBackground(null);
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        setText(String.valueOf(value));

        Vector v_col = new Vector();
        v_col.add(new Color(238,218,226));
        v_col.add(Color.white);

        Color col_now = null;

        try{
            Object o_indice_col = v_pos_col.get(i_count_col);
            int i_indice_col = (int) o_indice_col;

            col_now = (Color)v_col.get(i_col % 2);

            setBackground((Color)v_col.get(i_col % 2));
            if (row == i_indice_col){
                i_count_col++;
                i_col++;
            }
        }
        catch(ArrayIndexOutOfBoundsException e){}


        return this;
    }
    int i_col = 0;
    int i_count_col = 0;
    Vector v_pos_col = new Vector();
}

【问题讨论】:

标签: java jtable tablecellrenderer


【解决方案1】:

我解决了我的问题。我向我的班级传递了一个包含每一行及其颜色的哈希表。

public class MyTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer {

    public MyTableCellRenderer(Hashtable h){
        ht = h;
    } 
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        setBackground(null);
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        setText(String.valueOf(value));

        setBackground(ht.get(row));
        return this;
    }

    Hashtable<Reference, Color> ht = null;
}

【讨论】:

    【解决方案2】:
    Vector v_col = new Vector();
    

    每次调用 getTableCellRendererComponent() 方法时,您都会创建一个新的 Vector。每次需要渲染单元格时都会调用此方法。因此,由于您创建了一个新矢量,您将丢失所有颜色信息。

    因此,您需要创建向量并为该方法之外的每一行分配一个颜色。然后在该方法中,您只需从 Vector 中引用 Color。

    我不明白你的确切要求,所以我不能给你确切的代码,只能为你指出不同的方向。

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多