我有一个JTable,带有自定义DefaultTableModel。 我想将ImageIcon插入到结束列中。所以我有这个代码:
public class MyTableModelMovimentiContiBancari extends defaultTableModel {
static String[] ColName = { "Cod.","Data","Descrizione",
"Codice Spesa","Uscite","Entrate",""};
public LinkedHashMap<Integer,ContoBancarioXOperazione> mappa;
public MyTableModelMovimentiContiBancari() {
super(ColName, 0);
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public Class<Float> getColumnClass(Float columnIndex) {
return Float.class;
}
@SuppressWarnings("unchecked")
public void stampaTabella(List<ContoBancarioXOperazione> mappa,ContoBancario c){
ImageIcon aboutIcon = new ImageIcon(getClass().getResource("/resources/versamento.png"));
Double saldoIniziale = c.getSaldoIniziale();
this.addRow(new Vector());
super.setValueAt(c.getDataRegistrazioneSaldoFormattata(), this.getRowCount()-1, 1);
super.setValueAt("SALDO INIZIALE", this.getRowCount()-1, 2);
super.setValueAt(decimalFormatter.format(saldoIniziale), this.getRowCount()-1, 5);
for (ContoBancarioXOperazione conto : mappa) {
int nColumn=0;
this.addRow(new Vector());
super.setValueAt(conto.getId().toString(), this.getRowCount()-1, nColumn++);
super.setValueAt(conto.getDataRegistrazioneFormattata(), this.getRowCount()-1, nColumn++);
super.setValueAt(conto.getIdSpesa()!=null && conto.getIdSpesa()>0 ? conto.getIdSpesa().toString() :"", this.getRowCount()-1, nColumn++);
//se c'è stata una spesa l'importo va nell uscita
if(conto.getIdSpesa()!=null && conto.getIdSpesa()>0){
super.setValueAt(decimalFormatter.format(conto.getImporto()), this.getRowCount()-1, nColumn++);
saldoIniziale -=conto.getImporto();
}
if(conto.getContoBanarioPrelievo()!=null &&
conto.getContoBanarioPrelievo().getId()==c.getId()){
//IN QUESTO CASO L IMPORTO VA NELLE USCITE
super.setValueAt(decimalFormatter.format(conto.getImporto()), this.getRowCount()-1, 4);
saldoIniziale -=conto.getImporto();
}
//se il movimento non ha spese, non ha conti di prelievo
//allora significa che è una chiusura di giornata
if(conto.getIdSpesa()==0 && conto.getContoBanarioPrelievo() == null){
//IN QUESTO CASO L IMPORTO VA NELLE ENTRATE
super.setValueAt(decimalFormatter.format(conto.getImporto()), this.getRowCount()-1, 5);
saldoIniziale +=conto.getImporto();
}
super.setValueAt(aboutIcon, this.getRowCount()-1, 6);
}
}
}
这是包含我的TableMolde
的CustomTablepackage com.mcsolution.table.MioJTable;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import com.mcsolution.table.MioTableModel.MyTableModelMovimentiContiBancari;
public class CustomTableMovimentiConti extends JTable {
/**
*
*/
private static final long serialVersionUID = 1180088009825388637L;
private Font myFontTotale= new Font("Century Gothic", Font.BOLD, 17);
@SuppressWarnings("unused")
private MyTableModelMovimentiContiBancari modello; // Sarà un riferimento al TableModel
public CustomTableMovimentiConti(MyTableModelMovimentiContiBancari tableModel) {
super(tableModel);
modello = tableModel;
}
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component rendererComponent = super.prepareRenderer(renderer, row, column);
if(row==0){
rendererComponent.setBackground(new Color(200, 200, 200));
rendererComponent.setFont(myFontTotale);
}else if(row == super.getRowCount()-1){
if(super.getValueAt(row, 2)!=null &&
super.getValueAt(row, 2).toString().equalsIgnoreCase("SALDO FINALE")){
//ultima riga
rendererComponent.setBackground(new Color(200, 200, 200));
rendererComponent.setFont(myFontTotale);
}
}else{
rendererComponent.setBackground(Color.white);
}
return rendererComponent;
}
}
使用此代码,我没有任何错误,但在结尾列显示图像时,我看到完整路径。
答案 0 :(得分:1)
正如How to use tables, Concepts: Editors and Renderers中所述,默认渲染器能够处理Icon
或ImageIcon
个对象。
getColumnClass
的{{1}}方法需要返回适当列的TableModel
或Icon.class
,ImageIcon.class
需要使用正确的列进行备份该列的数据