2016-03-28 10 views
0

後、私はJavaのスイングを使用してアプリケーションをdevlopingてる呼び出されていない、私の問題がある:私は新しい行を追加している場合、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とすべてのTableColumが再作成されます。これは、TableColumnに追加したカスタムレンダラーを失うことを意味します。

コードは次のようになります。

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

また、あなたは新しいモデルにあなたが行を追加するたびに作成しないでしょう。行を追加するポイントは、それを既存のモデルに追加することです。

最後に、クラス名は大文字で始めるべきです(SHOULD)。レンダラー名を修正してください。

関連する問題