具有图像列的CellTable

时间:2012-04-23 12:58:01

标签: java gwt gwt-celltable

我有4列的celltable(名称大小已添加,已修改)

在运行时填充所有值。

该表正式显示文件。

文件可以是pdf,txt,doc so

  1. 我想在文档名称前面添加图标。

  2. 我还想在名称列

  3. 之前再添加一个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. 之前再添加一个Image列

3 个答案:

答案 0 :(得分: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;
 }
}

然后将其应用到您的桌面,如下所示:

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

<强>编辑: 如果您正在使用GWT,请参阅here以获取Grid Cell格式的示例代码。

答案 1 :(得分: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);
  }
}

答案 2 :(得分: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

您还可以在表格中添加图像列。