2017-11-17 6 views
0

のオブジェクトから動的に作成するJTableがあります。私はこれをおそらく完全に間違っているが、うまくいく。私が働くことができない唯一のことは、いくつかの細胞に画像を追加することです。ダイナミックに作成されたJTableに画像を追加する方法

すべてのことは、ImageIconオブジェクト名をStringとしてセルに追加することです。以下の私のコードを見てください。あなたがここにあなたのテーブルのための

をレンダラをインストールする必要が

private static Image doneImage = getIconImage("doneImage"); 
private static Image notDoneImage = getIconImage("notDoneImage"); 

private DefaultTableModel model = new DefaultTableModel(){ 
    @Override 
    public Class<?> getColumnClass(int column){ 
     if ((column & 1) != 0){ 
      return ImageIcon.class; 
     }else{ 
      return String.class; 
     } 
    } 
}; 

initTables(); 

JTable table = new JTable(); 
table.setModel(model); 

private void initTables(){ 

    model.addRow(new Object[]{}); 

    int rowsToAdd = 0; 
    int rowCount = 0; 
    int columnId = 0; 

    for(HouseObject aHouse : houses){ 
     for(RoomObject aRoom : aHouse.getRooms()){ 

      model.addColumn(null); 
      model.addColumn(aRoom.getId()); 
      model.setValueAt(aRoom.getId(), 0, columnId); 

      if (rowCount < aRoom.getEvents().size()){ 
       rowsToAdd = aRoom.getEvents().size() - model.getRowCount(); 
       for(int i = 0; i <= rowsToAdd; i++){ 
        model.addRow(new Object[]{}); 
       } 
       rowCount = model.getRowCount(); 
      } 

      for(int i = 0; i < aRoom.getEvents().size(); i++){ 
       model.setValueAt(aRoom.getEvents().get(i).getId(), i+1, columnId); 

       for(String houseDone : housesDone){ 
        if(aRoom.getEvents().get(i).getId().contains(houseDone)){ 
         model.setValueAt(doneImage , i+1, columnId+1); // this does not work 
        }else{ 
         model.setValueAt(notDoneImage, i+1, columnId+1); 
        } 
       } 
      } 

      columnId = columnId+2; 
     } 
    } 
} 

答えて

1

はレンダラです:

public class IconTableCellRenderer extends DefaultTableCellRenderer { 

    @Override 
    protected void setValue(Object value) { 
     if (value instanceof Icon) { 
      setText(null); 
      setIcon((Icon) value); 
     } else { 
      super.setValue(value); 
     } 
    } 
} 

だから、あなたはそれをインストールする必要があります。

JTable table = new JTable(); 
table.setModel(model); 
table.setDefaultRenderer(ImageIcon.class, new IconTableCellRenderer()); 
+0

これは機能します。私はすでにフォントの色のセルレンダラーを持っていましたが、 'setValue()'をオーバーライドする必要がありません。ありがとうございました! – omnomnom

+0

@omnomnomカスタムレンダラーは必要ありません。あなたがする必要があるのは "Icon.class"を返すだけで、テーブルはデフォルトのIconレンダラーを使用します。テーブルは、LAFごとに異なる(またはそうでない)デフォルトのレンダラーを使用します。本当に必要な場合を除き、レンダラーを作成しないでください。 – camickr

1

私が持っていますListオブジェクトから動的に作成するJTableです。

文字列をテーブルに追加するだけでは、画像をImageIconとして追加する必要があります。リストが必要なので、StringとIconの値を追加できます。

次に、Iconを含む列にIcon.classを返すように、TableModelのgetColumnClass(...)メソッドをオーバーライドする必要があります。テーブルは、アイコンに適切なレンダラーを使用します。

参照:How to set icon in a column of JTable?実例です。

+0

私は、 'getColumnClass()'をオーバーライドし、コード内にアイコンを含むすべての列に対して 'ImageIcon.class'を返しています。 – omnomnom

関連する問題