Я создал класс 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);
}
и интересная вещь есть. если я использую тему Nimbus look and feel, я не сталкиваюсь с этой проблемой.
и есть код для нимба. я использую это в основном методе этого диалога
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. Это основная проблема.
Одна ошибка, не относящаяся к вашему случаю: 'v = Integer.parseInt (table.getModel(). GetValueAt (table.convertRowIndexToView (строка), 10) .toString());'> > ** Неправильно **. Должно быть: 'v = Integer.parseInt (table.getModel(). GetValueAt (table.convertRowIndexToModel (строка), 10) .toString());' –
Другая ошибка. Если вы непосредственно модифицируете 'dataVector' DefaultTableModel', вызывая на нем' removeAllElements', вы должны вызвать ['fireTableDataChanged'] (https://docs.oracle.com/javase/7/docs/api/javax/ swing/table/AbstractTableModel.html # fireTableDataChanged% 28% 29) на модели сразу после этого. –
Спасибо, я исправил его. –