2011-04-10 17 views
5

मैं कॉलम के हेडर को सेट करने में सक्षम हूं लेकिन JTable के पहले कॉलम की सभी पंक्तियों में आइकन सेट करने में सक्षम नहीं हूं।जेटीबल के कॉलम में आइकन कैसे सेट करें?

public class iconRenderer extends DefaultTableCellRenderer{ 
    public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){ 
     imageicon i=(imageicon)obj; 
     if(obj==i) 
      setIcon(i.imageIcon); 
     setBorder(UIManager.getBorder("TableHeader.cellBorder")); 
     setHorizontalAlignment(JLabel.CENTER); 
     return this; 
    } 
} 

public class imageicon{ 
    ImageIcon imageIcon; 
    imageicon(ImageIcon icon){ 
     imageIcon=icon; 
    } 
} 

और मेरे BuildTable() विधि में लाइनों के नीचे।

public void SetIcon(JTable table, int col_index, ImageIcon icon){ 
     table.getTableHeader().getColumnModel().getColumn(col_index).setHeaderRenderer(new iconRenderer()); 
     table.getColumnModel().getColumn(col_index).setHeaderValue(new imageicon(icon)); 
} 

हम कैसे यह पहली स्तंभों की सभी पंक्तियों के लिए सेट कर सकते हैं? मैंने लूप के साथ प्रयास किया है लेकिन आइकन सेट करने के लिए फिर से चलाने के लिए पंक्तियों के लिए अभी तक नहीं मिला है। या कोई और तरीका है?

+0

यह कोड अब क्या करता है? इसके साथ क्या विशेष रूप से गलत है। – jzd

+1

इमेजिकॉन क्लास का बिंदु भी क्या है। बस उस कॉलम में छवि को स्टोर करें और इस अन्य वर्ग से निपटने के बजाय इसे सीधे इस्तेमाल करें। – jzd

+0

इसके सेटिंग कॉलम का हेडर केवल। लेकिन पहले कॉलम की सभी पंक्तियों में आइकन डालना चाहते हैं। – bsm

उत्तर

9

कस्टम रेंडर बनाने की कोई आवश्यकता नहीं है। जेटीबल पहले से ही एक आइकन रेंडरर का समर्थन करता है। आपको इस रेंडरर का उपयोग करने के लिए टेबल को बताने की जरूरत है। यह तालिका मॉडल के getColumnClass (...) विधि को ओवरराइड करके किया जाता है:

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(); 
      } 
     }); 
    } 

} 
2

आप अपने हेडर के प्रस्तुत करने के लिए आइकन रेंडरर का उपयोग कर रहे हैं। कॉलम के सेल रेनेडर को आइकन रेंडरर का एक उदाहरण भी सेट करें। कॉलम पर setCellRenderer पर कॉल करें।

http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumn.html#setCellRenderer(javax.swing.table.TableCellRenderer)

साइड नोट: जावा मानकों निर्दिष्ट करें कि वर्ग के नाम बड़े अक्षरों साथ शुरू करना चाहिए कोडिंग, तो iconRenderer बजाय IconRenderer होना चाहिए।

+0

धन्यवाद। ओह, मैं इसे कैसे भूल सकता था !!!! (साइड नोट के बारे में) क्षमा करें मेरी गलती। – bsm

संबंधित मुद्दे