1

我有 4 列的单元格表(名称大小 addedBy modifiedBy )

在运行时填充所有值。

该表实际上显示了文件。

文件可以是pdf、txt、doc等

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

  2. 而且我还想要在名称列之前再添加一个图像列

到目前为止我的代码。

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

这就是我制作桌子和价值的方式。

请任何人告诉我程序

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

  2. 而且我还想要在名称列之前再添加一个图像列

4

3 回答 3

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,请参阅此处以获取 Grid Cell 格式的示例代码。

于 2012-04-23T13:09:20.247 回答
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);
  }
}
于 2012-04-23T13:07:50.070 回答
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为列或表的 。

您还可以执行类似的操作来将图像列添加到表中。

于 2012-04-23T13:15:59.583 回答