2014-05-09 77 views
3

我想在我的JTable的單元格應用渲染,這樣做我創建了一個類名爲myRenderer:如何將圖像呈現到一個JTable細胞

import java.awt.Component; 

import javax.swing.ImageIcon; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableCellRenderer; 

public class MyRenderer extends DefaultTableCellRenderer { 

public Component getTableCellRendererComponent(JTable table, ImageIcon icon) { 

setIcon(icon); 
return this; 
} 
} 

我使用這段代碼應用渲染器上的細胞:

MyRenderer renderer = new MyRenderer(); 

renderer.getTableCellRendererComponent(table, icon); 

table.getColumnModel().getColumn(6).setCellRenderer(renderer); 

的問題是,在rebderer上在列6中的所有單元格應用,我希望它是在一個小區只(行/列),但我不施加不知道該怎麼做?

在此先感謝

回答

5

除了這個事實,你甚至不正確重寫getTableCellRendererComponent方法從側面進行設置,你甚至都不需要自定義呈現在列中顯示圖像

How to Use Tables。以下是使用默認預配置渲染器的類型列表

  • Boolean - 使用複選框呈現。
  • Number - 由右對齊標籤呈現。
  • Double, Float - 與Number相同,但對象到文本的轉換由NumberFormat實例(使用當前語言環境的默認數字格式)執行。
  • Date - 由標籤呈現,由DateFormat實例執行對象到文本轉換(使用日期和時間的簡短樣式)。
  • ImageIcon,Icon - 由中心標籤呈現。
  • Object - 由顯示對象字符串值的標籤呈現。

所以,你可以把添加ImageIcon表,並給它會被渲染成這樣,你正確地從教程覆蓋getColumnClass()

另外:

要選擇顯示的渲染器列中的單元格,表格首先確定您是否爲該特定列指定了渲染器。如果沒有,那麼該表將調用表模型的getColumnClass方法,該方法獲取列單元的數據類型。接下來,該表與其中的單元格渲染註冊

所以說,你有三列的DefaultTableModel並且希望在最後一列的ImageIcon數據類型的列表中列的數據類型進行比較。您將只需添加一個ImageIcon第三列做這樣的事

DefaultTableModel model = new DefaultTableModel(...) { 
    @Override 
    public Class<?> getColumnClass(int column) { 
     switch (column) { 
      case 2: return ImageIcon.class; 
      default: return String.class 
     } 
    } 
}; 
JTable table = new JTable(model); 

然後,它會被渲染成這樣

String colOneDate = "Data"; 
String colTwoData = "Data"; 
ImageIcon colThreeIcon = new ImageIcon(...); 
model.addRow(new Object[] { colOneData, colTwoData, colThreeIcon }); 

你可能還需要設置相應的列寬和高度,到圖像的大小。爲此,你可以看到任何these questions

+0

謝謝,這工作得很好! – Simo03

1

您可以按以下所述使用getTableCellRendererComponent功能。圖標,行和coulmn顯示圖標,你可以使用一個setter梅索德

import java.awt.Component; 

import javax.swing.JTable; 
import javax.swing.table.DefaultTableCellRenderer; 


    public class MyRenderer extends DefaultTableCellRenderer { 

public MyRenderer() { 
    // TODO Auto-generated constructor stub 
} 

@Override 
public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, 
      row, column); 

    int neededRow=0; // set the needed row here in which the icon to be dispayed 
    int neededcolumn=0; // set the needed column here in which the icon to be dispayed 

    if(row==neededRow && column==neededcolumn) 
    { 
     setIcon(icon); 
    } 

    return this 
} 
}