2017-03-14 6 views
1

列クラスを定義して列をソートするように管理した後で、現在のセルレンダリングは、文字列値を含み、整数列に適用されない列にのみ適用されます。列クラスの整数を定義すると、表のセルのレンダリングがスキップ/スキップされますか?

This is what it looks like: ("% of target reached" is the Integer Column seen as white - should not be white)

これは、文字列と整数のクラスのあなたの列のクラス定義を示しています

JTable compTable5 = new JTable(); 
    compTable5.setEnabled(false); 
    DefaultTableModel model5 = new DefaultTableModel(){ 
     @Override 
     public Class getColumnClass(int column) { 
      switch (column) { 
       case 0: 
        return String.class; 
       case 1: 
        return Integer.class; 

       default: 
        return String.class; 

      } 
     } 
    }; 

これはレンダラ

compTable5.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){ 
     @Override 
     public Component getTableCellRendererComponent(JTable table, 
                 Object value, boolean isSelected, boolean hasFocus, int row, int col) { 

      super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 

      int status = (int)table.getValueAt(row, 1); 
      String status2 = (String)table.getValueAt(row, 5); 

      if ("Not Used".equals(status2)) {setBackground(Color.lightGray);setForeground(Color.black);} 
      else if (status2.equals("Priority 1")) {setBackground(scaleRed);} 
      else if (status == 0 && !status2.equals("Working") && !status2.equals("Not Used") && !status2.equals("Priority 1")) {setBackground(pink);setForeground(Color.black);} 
      else if (status < 20) {setBackground(scaleRed);} 
      else if (status >= 20 && status < 40) {setBackground(scaleOrange);setForeground(Color.black);} 
      else if (status >= 40 && status < 60) {setBackground(scaleYellow);setForeground(Color.black);} 
      else if (status >= 60 && status < 80) {setBackground(scaleGreen1);setForeground(Color.black);} 
      else if (status >= 80 && status < 100) {setBackground(scaleGreen2);setForeground(Color.black);} 
      else if (status > 100) {setBackground(scaleBlue);setForeground(Color.white);} 
      else { 
       setBackground(table.getBackground()); 
       setForeground(table.getForeground()); 
      } 

      return this; 
     } 
    }); 

である私は、Javaのnoobだと、これが私の最初のstackoverflowですあなたがすべてこのフォーラムで私に与えてくれたすべての助けに感謝します。

答えて

1

JTableは、デフォルトの左揃えではなく、右揃えの値を表示するために、整数(および倍精度、浮動小数点数、ロング)用の特別なTableCellRendererを使用する可能性が最も高いです。

DefaultTableCellRendererObject.classにバインドします。特殊化されたTableCellRendererが見つからない場合はフォールバックとなります。

このように、Object.classへとInteger.classに両方のあなたのDefaultTableCellRendererをバインドしよう:

DefaultTableCellRenderer myRenderer = new DefaultTableCellRenderer() { 
    // all your code for the cell renderer, as in your example 
} 
compTable5.setDefaultRenderer(Object.class, myRenderer); 
compTable5.setDefaultRenderer(Integer.class, myRenderer); 
+0

は私の問題を修正あなたの助けのためにどうもありがとうございます! – BlueSteel

関連する問題