2012-04-23 41 views
1

我有celltable用4柱(名称大小addedBy modifiedBy)CellTable与图像列

所有值在运行时间期间填充。

表格实际显示文件。

文档可以PDF,TXT,DOC等等

  1. 我想要的文件的名称前添加图标。

  2. ,我也想名字列

到目前为止我的代码之前多了一个image列。

* 
private CellTable<FDocument> getDocumentTable() { 
     if (documentTable == null) { 
      documentTable = new CellTable<FDocument>(); 
      documentTable.setSize("600px", "300px"); 
      documentTable.addColumn(nameColumnD, "NAME"); 
      documentTable.addColumn(sizeColumnD, "SIZE"); 
      documentTable.addColumn(modified_by_ColumnD, "MODIFIED BY"); 
      documentTable.addColumn(dateColumnD, "MODIFIED ON"); 


     } 
     return documentTable; 
    } 


TextColumn<FDocument> idColumnD = new TextColumn<FDocument>() {    
      @Override 
      public String getValue(FDocumentobject) { 
       // TODO Auto-generated method stub 
       return object.getId(); 
      } 
     }; 
     TextColumn<FDocument> nameColumnD = new TextColumn<FDocument>() { 
      @Override 
      public String getValue(FDocumentobject) { 
       return object.getName(); 
      } 
     };   
     TextColumn<FDocument> sizeColumnD = new TextColumn<FDocument>() { 
      @Override 
      public String getValue(FDocumentobject) { 
       return object.getSize();        
      } 
     }; 
     TextColumn<FDocument> modified_by_ColumnD = new TextColumn<FDocument>() { 
      @Override 
      public String getValue(FilenetDocument object) { 
       return object.getModifiedBy(); 
      } 
     }; 
     TextColumn<FDocument> dateColumnD = new TextColumn<FDocument>(){ 
      @Override 
      public String getValue(FDocumentobject){ 
       return object.getModifiedOn(); 
      } 
     }; 

private void addValuesToTable(){ 
     List<FDocument> FDC = null; 


     /* 
     * Adding data to folder Table 
     */ 
     ArrayList<FDocument> documentsArrayList = new ArrayList<FDocument>(); 
     Iterator<String> iteratorDocument = documents.getDocuments().getDocumentCollection().keySet().iterator(); 
     while(iteratorDocument.hasNext()){ 
      String key = iteratorDocument.next().toString(); 
      FDocument value = documents.getDocuments().getDocumentCollection().get(key); 
      documentsArrayList.add(new FDocument(value.getName(), value.getSize(),value.getModifiedBy(), value.getModifiedOn(),value.getId())); 

     } 
     FDC = documentsArrayList; 

    // Create a data provider. 

     ListDataProvider<FDocument> dataProvider1 = new ListDataProvider<FDocument>(); 

    // Connect the table to the data provider. 

     dataProvider1.addDataDisplay(documentTable); 

    // Add the data to the data provider, which automatically pushes it to the widget. 

     List<FDocument> listDocument = dataProvider1.getList(); 
      for (FDocument fDocument: FDC) { 

       listDocument.add(fDocument1); 
      } 

这就是我制作我的表格和价值的方式。

PLZ任何一个可以告诉我的程序

  1. 文档的名称前添加图标。

  2. ,我也想名字列

回答

3

使用DefaultTableCellRenderer根据需要的图标设置自定义渲染器。如下所示,渲染器创建一个新标签来屏蔽所选列中的所有单元格。

private class CellRenderer extends DefaultTableCellRenderer 
{ 

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
{ 
    JLabel label = new JLabel((String)value); 
    label.setOpaque(true); 
    Icon icon = new ImageIcon("icon.png"); 
    label.setIcon(icon); 
    return label; 
} 
} 

然后如下图所示将它应用到你的表:如果你使用GWT然后看看here为网格单元格的格式的示例代码 :

table.getColumnModel().getColumn(0).setCellRenderer(new CellRenderer()); 

编辑。

+0

对不起,我忘了提及我正在使用GWT。 – NewCodeLearner 2012-04-23 13:31:18

+2

请参阅编辑链接到GWT网格单元渲染示例。 – Bitmap 2012-04-23 13:38:49

1

前多了一个图像列为了创建图像列,您需要定义设置标签上的图标自定义呈现

import java.awt.Component; 

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

public class MyRenderer extends DefaultTableCellRenderer { 

    /* 
    * @see TableCellRenderer#getTableCellRendererComponent(JTable, Object, boolean, boolean, int, int) 
    */ 
    public Component getTableCellRendererComponent(JTable table, Object value, 
               boolean isSelected, boolean hasFocus, 
               int row, int column) { 
    ImageIcon icon = new ImageIcon(getClass().getResource("images/moon.gif")); 
    setText((String)value); 
    setIcon(icon); 
    return this; 
    } 
} 

而且那么,在表格中使用渲染器如下,

import java.awt.GridLayout; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 
import javax.swing.table.TableModel; 

public class Sample { 

    public static void main(String[] args) { 
    JFrame f = new JFrame("Sample"); 
    f.getContentPane().setLayout(new GridLayout(1,0,0,0)); 
    TableModel model = new AbstractTableModel() { 
     public Object getValueAt(int rowIndex, int columnIndex) { 
     return rowIndex + "," + columnIndex; 
     } 
     public int getColumnCount() { 
     return 3; 
     } 
     public int getRowCount() { 
     return 10; 
     } 
    }; 

    JTable table = new JTable(model); 
    table.getColumnModel().getColumn(1).setCellRenderer(new MyRenderer()); 
    JScrollPane pane = new JScrollPane(table); 
    f.getContentPane().add(pane); 
    f.pack(); 
    f.setVisible(true); 
    } 
} 
+0

对不起,我忘了提及我使用GWT。 – NewCodeLearner 2012-04-23 13:31:42

1

这两种可能都需要一个定制TableCellRenderer ...

请参考这里的API文档... http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/table/DefaultTableCellRenderer.html

你基本上要覆盖getTableCellRendererComponent()方法,并在任何额外的代码添加了渲染图像。

例如,要在文档前添加一个图标,您可以执行以下操作...

public void MyTableCellRenderer extends DefaultTableCellRenderer { 
    public MyTableCellRenderer(){ 
     super(); 
    } 

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){ 
     Component renderer = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column); 
     if (row == 0 && renderer instanceof JLabel){ // where row == 0 is the row you want to add the icon to 
      ((JLabel)renderer).setIcon(new ImageIcon("image.png")); 
     } 

     return renderer; 
    } 
} 

您需要将此设置为该列或表的TableCellRenderer

你也会做一个类似的事情来添加图像列到表中。

+0

抱歉,我忘记提及我正在使用GWT。 – NewCodeLearner 2012-04-23 13:30:48