【问题标题】:Jtable cellrenderer doesnt change backgroun of integer valueJtable 单元格渲染器不会更改整数值的背景
【发布时间】:2016-03-05 13:25:11
【问题描述】:

我创建了 cellrenderer 类来更改我的行背景。 如果 row's(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;
    }


}

这是表格。

 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...

现在已经非常感谢了。 祝你有美好的一天。

编辑:默认单元格渲染器不适用于保存 Integer.class 的单元格。 这是主要问题。

【问题讨论】:

  • 一个与您的案例无关的错误:v=Integer.parseInt(table.getModel().getValueAt(table.convertRowIndexToView(row), 10).toString()); >> 错误。应该是:v=Integer.parseInt(table.getModel().getValueAt(table.convertRowIndexToModel(row), 10).toString());
  • 另一个错误。如果直接修改DefaultTableModeldataVector,在其上调用removeAllElements,则应在模型上调用fireTableDataChanged
  • 你能告诉我们你设置单元格渲染器的代码吗?

标签: java jtable cell renderer lf


【解决方案1】:

经过大量的研究和测试:) 终于我找到了问题所在。 问题是设置表格默认渲染器样式

我以前用过这种类型(Ex code)

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

这是将 object.class 转换为 String.class(默认)(导致 DefaultCellRenderer xD) 渲染器只在字符串单元格上工作

然后我再次像这样设置我的渲染器

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

现在这适用于整数和字符串单元格

工作和金属! :)

所以你要说一下外观和感觉的东西

我认为在 Nimbus LAF setDefaultRenderer(Object.class,new MyDefaultCellRenderer()) 中获取所有类型的对象。 其他 LAF 没有。

非常感谢各位。如果您对此有额外的想法,请在下面发表评论。 祝你工作轻松:)

【讨论】:

  • 这就是我所怀疑的,与设置渲染器有关。 GJ ;-)。由于您已经回答了自己的问题并且问题已解决,您应该检查答案旁边的 ✔。
  • 是的,你是对的,但我回答的太早了,系统不允许我检查自己的问题。非常感谢。
猜你喜欢
  • 2013-01-11
  • 2016-06-15
  • 2016-02-23
  • 2020-01-20
  • 2011-09-24
  • 2011-10-02
  • 2012-09-06
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多