2016-03-05 3 views
0

Я создал класс cellrenderer для изменения фона моих строк. Если значение столбца (rate%) colours - это то, что я пытаюсь изменить фон строки. Но когда я пытаюсь. Renderer меняет цвет не целочисленных колонок.Jtable cellrenderer не меняет backgroun целочисленного значения

Это мой рендерер.

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; 
    } 


} 

и вот таблица Inı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

и интересная вещь есть. если я использую тему Nimbus look and feel, я не сталкиваюсь с этой проблемой. nimbus example

и есть код для нимба. я использую это в основном методе этого диалога

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 (строка), 10) .toString());'> > ** Неправильно **. Должно быть: 'v = Integer.parseInt (table.getModel(). GetValueAt (table.convertRowIndexToModel (строка), 10) .toString());' –

+1

Другая ошибка. Если вы непосредственно модифицируете 'dataVector' DefaultTableModel', вызывая на нем' removeAllElements', вы должны вызвать ['fireTableDataChanged'] (https://docs.oracle.com/javase/7/docs/api/javax/ swing/table/AbstractTableModel.html # fireTableDataChanged% 28% 29) на модели сразу после этого. –

+0

Спасибо, я исправил его. –

ответ

1

После многих исследований и испытаний :) наконец-то я нашел проблему. Проблема в настройке таблиц по умолчанию стиль рендерер

Я использовал этот тип ранее (Ex код)

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

и это становится Object.class к String.class (в) По умолчанию (причина DefaultCellRenderer XD) и визуализатор просто работать на Струнные клетках

и я установил мой рендер снова, как этот

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

Теперь это может работать для целых и строковых ячеек

Работа и металл! :) enter image description here

Так у хочу сказать, что о выглядеть и чувствовать себя вещи

Я думаю, в Nimbus LAF setDefaultRenderer(Object.class,new MyDefaultCellRenderer()) получить все тип объекта. Другие LAF's не делают.

Большое спасибо. Если у вас есть дополнительная мысль об этом, пожалуйста, оставьте комментарий ниже. У вас есть легкая работа :)

+0

Вот что я подозревал, что-то с настройкой рендеринга. GJ ;-). Поскольку вы ответили на свой вопрос, и проблема решена, вы должны проверить ✔ рядом с вашим ответом. –

+0

да, вы правы, но я ответил на свой вопрос слишком рано, и система не позволяет мне проверить мой собственный вопрос. Большое спасибо. –

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

  • Нет связанных вопросов^_^