我創建了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);
}
和intresting的東西是。如果我使用Nimbus外觀主題,我不會遇到這個問題。
並且有一個用於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的單元格。 那是主要問題。
一個錯誤與您的情況無關:'v = Integer.parseInt(table.getModel()。getValueAt(table.convertRowIndexToView(row),10).toString());'> > **錯誤**。應該是:'v = Integer.parseInt(table.getModel()。getValueAt(table.convertRowIndexToModel(row),10).toString());' –
另一個錯誤。如果您通過調用'removeAllElements'直接修改DefaultTableModel的'dataVector',則應該調用['fireTableDataChanged'](https://docs.oracle.com/javase/7/docs/api/javax/ swing/table/AbstractTableModel.html#fireTableDataChanged%28%29)。 –
謝謝我修復它。 –