添加新行后未调用getTableCellRendererComponent

时间:2016-03-28 14:50:37

标签: java swing jtable

我正在开发一个Java swing的应用程序,我的问题是:如果我添加一个新行,getTableCellRendererComponent没有被调用,我的代码:

创建表:

   public Tablecase() {

       SystemeBaseConnaissance = new LESSymptomesEnsembleEt();
       SystemeBaseConnaissance.lesSymptomesEnsembleEt.add("x");
       initComponents();
       jTable1.setTableHeader(null);
       jTable1.getColumn("Title 1").setCellRenderer(new brmcellrender());

       Model model = new Model();

       jTable1.setModel( model);
       model.addRow(new Object[]{"ss"});
       System.out.println(SystemeBaseConnaissance.lesSymptomesEnsembleEt.size());
    }

我的Defaulttablemodel:

 class Model extends DefaultTableModel{

    public Model(){

        super();
     this.addRow(new Object[]{"sx"}  );    
       repaint();

    }

    @Override
    public void addRow(Object[] rowData) {
        super.addRow(rowData); //To change body of generated methods, choose Tools | Templates.
    }


}

我的DefaultCellEditor:

    public class brmcelleditor extends DefaultCellEditor{

    public brmcelleditor(JTextField textField) {
        super(textField);
    }
    }


     public class brmcellrender extends DefaultTableCellRenderer{

    public brmcellrender() {
        super();
        System.out.println("mefgoudabrahim20.Tablecase.brmcellrender.<init>()");
    /**/
    }

    /*affichge */

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            System.out.println("mefgoudabrahim20.Tablecase.brmcellrender.<init>qsdqsdqsd()");
            CaseOfTable cas = new CaseOfTable() ; 
            return  ( cas) ;
        }



    }

1 个答案:

答案 0 :(得分:1)

  

如果我要添加新行,则不会调用getTableCellRendererComponent

问题不在于您添加新行。

jTable1.getColumn("Title 1").setCellRenderer(new brmcellrender());
Model model = new Model();
jTable1.setModel( model);

问题是您在设置渲染器后设置了模型。设置表的模型时,将重新创建TableColumnModel和所有TableColums,这意味着您将丢失添加到TableColumn的自定义渲染器。

代码应为:

Model model = new Model();
jTable1.setModel( model);
jTable1.getColumn("Title 1").setCellRenderer(new brmcellrender());

此外,每次添加行时都不会创建新模型。添加行的目的是将其添加到现有模型中。

最后,类名应该以大写字符开头。修复渲染器名称。