我创建了cellrenderer类来改变我的行背景。 如果行的(rate%)colums值是我尝试更改行的背景。 但是,当我尝试它。渲染器仅更改非整数列的背景。
这是我的渲染器。
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);
}
有趣的是。如果我使用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的单元格。 这是主要问题。
答案 0 :(得分:2)
经过大量的研究和测试:)最后我发现了问题。 问题是设置表默认渲染器样式
之前我使用过这种类型(Ex代码)
myTable.setDefaultRenderer(Object.class,new MyDefaultCellRenderer());
这是将object.class变为String.class(默认情况下)(导致DefaultCellRenderer xD) 并且渲染器只适用于String单元格
我再次设置我的渲染器
myTable.setDefaultRenderer(Integer.class,new MyDefaultCellRenderer());
myTable.setDefaultRenderer(String.class,new MyDefaultCellRenderer());
现在这可以用于整数和字符串单元格
所以你要说一下外观和感觉
我认为在Nimbus LAF中setDefaultRenderer(Object.class,new MyDefaultCellRenderer())
获取所有类型的对象。
其他LAF没有。
非常感谢你们。如果你有额外的想法,请在下面留下评论。 轻松工作:))