2016-03-28 3 views
0

Я devloping приложения с Java Swing, моя проблема: если я добавляю новую строку, то getTableCellRendererComponent не называется, мой код: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

Полный пример использования 'setCellRenderer()' рассматривается [здесь] (http://stackoverflow.com/q/17157915/230513). – trashgod

+0

моя проблема в setCellRenderer()? – MohaMed

+0

Если параметр _not_ установлен как по столбцу, так и по классу, будет использоваться средство визуализации по умолчанию. – trashgod

ответ

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()); 

Кроме того, вы бы не создать новую модель каждый раз, когда вы добавляете строку. Точка добавления строки - это добавить ее в существующую модель.

И, наконец, имена классов ДОЛЖНЫ начинаться с символа верхнего регистра. Исправьте имя рендера.

Смежные вопросы