2016-03-05 80 views
0

我創建了cellrenderer類來更改我的行背景。 如果行的(率%)colums值是我嘗試改變背景的行。 但是當我嘗試它。渲染器僅更改非整數列的背景。Jtable cellrenderer不會改變整數值的背景

這是我的渲染器。

public class hucreRenderer extends DefaultTableCellRenderer { 

    Color orginal=Color.white;  
    @Override 
public Component 
     getTableCellRendererComponent(
       JTable table, Object value, boolean isSelected, 
          boolean hasFocus, int row, int column) { 

     Component cell = 
        super.getTableCellRendererComponent(
         table, value, isSelected, hasFocus, row, column); 

      int value; 
       try { 
        //10th column is a 'rate' column 
        v=Integer.parseInt(table.getModel().getValueAt(
          table.convertRowIndexToView(row), 10).toString()); 

       }catch(Exception e){value=1000;} 

        if(value<100){  

          cell.setBackground(Color.red); 

        else{ 
       cell.setBackground(orginal); 
        } 

     return cell; 
    } 


} 

這裏是TableInıt。

String col[] = {"ID","AD","GRUP", "ADET", "Kritik","TELEFON", "TEDARİKÇİ", "ALIŞ", "SATIŞ", "ADRES","RATE(%)"}; 

urunTablo.setModel(new DefaultTableModel(new Object[0][], col) { 
     Class[] types = 
{ Integer.class, String.class,String.class,Integer.class,Integer.class,String.class,String.class,Integer.class,Integer.class,String.class,Integer.class }; 


DefaultTableModel t =(DefaultTableModel)urunTablo.getModel(); 
t.getDataVector().removeAllElements(); 
t.setColumnIdentifiers(col); 


for(Urun u:urunler){  
     int r=new Integer(u.getRate()); 
     Object row[]={ 
     new Integer(u.getKod()), 
     u.getAd(), 
     u.getGrup(), 
     new Integer(u.getAdet()), 
     new Integer(u.getKritikAdet()), 
     u.getTelefon(), 
     u.getTedarikci(), 
     new Integer(u.getAlis()), 
     new Integer(u.getSatis()), 
     u.getAdres(), r}; 

     t.addRow(row); 


    } 

這裏是結果。 Example

和intresting的東西是。如果我使用Nimbus外觀主題,我不會遇到這個問題。 nimbus example

並且有一個用於nimbus的代碼。我在這個對話框的主要方法中使用這個

try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
//and the catchs... 

現在非常感謝alredy。 祝您有愉快的一天。

編輯:默認單元格渲染器不適用於保存Integer.class的單​​元格。 那是主要問題。

+1

一個錯誤與您的情況無關:'v = Integer.parseInt(table.getModel()。getValueAt(table.convertRowIndexToView(row),10).toString());'> > **錯誤**。應該是:'v = Integer.parseInt(table.getModel()。getValueAt(table.convertRowIndexToModel(row),10).toString());' –

+1

另一個錯誤。如果您通過調用'removeAllElements'直接修改DefaultTableModel的'dataVector',則應該調用['fireTableDataChanged'](https://docs.oracle.com/javase/7/docs/api/javax/ swing/table/AbstractTableModel.html#fireTableDataChanged%28%29)。 –

+0

謝謝我修復它。 –

回答

1

經過大量的研究和測試:)最後我發現了這個問題。 問題是設置表默認渲染風格

我使用這種類型的前(出碼)

myTable.setDefaultRenderer(Object.class,new MyDefaultCellRenderer()); 

,這是越來越object.class到String.class(在默認)(原因爲defaultCellRenderer XD) 和渲染只是字符串細胞

工作,我再次把我的渲染這樣

myTable.setDefaultRenderer(Integer.class,new MyDefaultCellRenderer()); 
myTable.setDefaultRenderer(String.class,new MyDefaultCellRenderer()); 

現在這可以用於Integer和String單元格

工作和金屬! :) enter image description here

,這樣你們會說怎麼樣的外觀和感覺的東西

我覺得在雨雲LAF setDefaultRenderer(Object.class,new MyDefaultCellRenderer())得到所有類型的對象。 其他LAF的沒有。

非常感謝。如果您有其他想法,請在下面留言。 有一個簡單的工作:)

+0

這就是我所懷疑的,與設置渲染器有關。 GJ ;-)。既然你已經回答了你自己的問題,並且問題解決了,你應該在你的答案旁邊檢查✔。 –

+0

是的你是對的,但我太早回答我的問題,系統不允許我檢查我自己的問題。非常感謝。 –