我正在开发一个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) ;
}
}
答案 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());
此外,每次添加行时都不会创建新模型。添加行的目的是将其添加到现有模型中。
最后,类名应该以大写字符开头。修复渲染器名称。