2016-12-06 115 views
1

使用DefaultTableCellRenderer我編寫此代碼用於插入圖像插入到柱如何插入圖像插入在Java

LessonTable.setDefaultRenderer(Object.class, new SimpleTableCellRenderer()); 

class SimpleTableCellRenderer extends DefaultTableCellRenderer { 

     ImageIcon image = new ImageIcon(getClass().getResource("imagefolder/this.png")); 
     JLabel lbl = new JLabel(); 

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

      lbl = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

      if (column == 1) {// i want to set image only for this column 
       lbl.setHorizontalAlignment(SwingConstants.LEFT); 
       lbl.setIcon(image); 
      } 
      else { 
       lbl.setHorizontalAlignment(SwingConstants.CENTER); 
      } 

     return lbl; 

    } 
} 

但這代碼插入該圖像獲得除了第二列中的所有列的列的表。 這裏有什麼問題?

回答

2

請勿創建自定義渲染器。 JTable已經支持圖標的渲染器。

取而代之,您需要做的是覆蓋您的表模型的getColumnClass(...)方法,以返回Icon.class,表格將使用適當的渲染器。

import java.awt.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableIcon extends JPanel 
{ 
    public TableIcon() 
    { 
     Icon aboutIcon = new ImageIcon("about16.gif"); 
     Icon addIcon = new ImageIcon("add16.gif"); 
     Icon copyIcon = new ImageIcon("copy16.gif"); 

     String[] columnNames = {"Picture", "Description"}; 
     Object[][] data = 
     { 
      {aboutIcon, "About"}, 
      {addIcon, "Add"}, 
      {copyIcon, "Copy"}, 
     }; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames) 
     { 
      // Returning the Class of each column will allow different 
      // renderers to be used based on Class 
      public Class getColumnClass(int column) 
      { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     JTable table = new JTable(model); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 

     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("Table Icon"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new TableIcon()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
    } 

}