2017-06-14 50 views
0

正如標題可能暗示,我想弄清楚如何更改行的類,但更具體地說,我試圖改變某些行的類,而不是每一行。我所能找到的是如何更改列的類。JTable更改行類

我似乎無法找到如何調整特定行上的類。如果任何人可以指出我在正確的方向,將不勝感激。

+1

我沒有看到任何解決方案,除了創建一個'CellRenderer'改變依賴於行的顯示組件... –

+0

@TimothyTruckle這就是我思考,但我已經通過了方法,似乎無法找到如何改變一個類而不改變整個列類。 –

+1

你能告訴我們爲什麼你想要行類,以及上下文是什麼? –

回答

0

這是我想接近它:

public class TableRenderer { 
    interface ComponentTextSetter<T> { 
     void setText(String value, T component); 
    } 
    private static final Map<Component, ComponentTextSetter> components = new HashMap() { 
     { 
      put(new JLabel(), (ComponentTextSetter<JLabel>) (value, component) -> component.setText(value)); 
      put(new JTextField(), 
        (ComponentTextSetter<JTextField>) (value, component) -> component.setText(value)); 
      put(new JComboBox<>(), (ComponentTextSetter<JComboBox>) (value, component) -> { 
       component.addItem(value); 
       component.setSelectedItem(value); 
      }); 
     } 
    }; 

    private static TableCellRenderer renderer = new DefaultTableCellRenderer() { 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
       boolean hasFocus, int row, int column) { 
      Component jComponent = new ArrayList<>(components.keySet()).get(row % components.size()); 
      components.get(jComponent).setText(value.toString(), jComponent); 
      return jComponent; 
     } 
    }; 

    public static void main(String[] args) { 
     TableModel tableModel = new DefaultTableModel(10, 3) { 
      @Override 
      public Object getValueAt(int arg0, int arg1) { 
       return "value" + new Random().nextInt(4); 
      } 
     }; 
     JTable jTable = new JTable(tableModel); 
     jTable.setDefaultRenderer(Object.class, renderer); 
     JOptionPane.showMessageDialog(null, jTable); 
    } 
} 
+0

渲染器是不正確的地方設置,修改,更改模型值,只是模型被指定爲 – mKorbel

+0

@mKorbel在哪一行我的渲染器更改值? –