Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带图像列的单元格表_Java_Gwt_Gwt Celltable - Fatal编程技术网

Java 带图像列的单元格表

Java 带图像列的单元格表,java,gwt,gwt-celltable,Java,Gwt,Gwt Celltable,我有4列的celltable(名称大小由modifiedBy添加) 在运行时填充所有值 该表实际显示了文件 文档可以是pdf、txt、doc等 我想在文档名称前添加图标 我还想在名称列之前再加一个图像列 我的代码到目前为止 * private CellTable<FDocument> getDocumentTable() { if (documentTable == null) { documentTable = new CellTable&l

我有4列的celltable(名称大小由modifiedBy添加)

在运行时填充所有值

该表实际显示了文件

文档可以是pdf、txt、doc等

  • 我想在文档名称前添加图标

  • 我还想在名称列之前再加一个图像列

  • 我的代码到目前为止

    *
    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);
                }
    
    *
    私有CellTable getDocumentTable(){
    if(documentTable==null){
    documentTable=新单元格表();
    documentTable.setSize(“600px”、“300px”);
    documentTable.addColumn(名称ColumnD,“名称”);
    documentTable.addColumn(SizeColumn,“大小”);
    documentTable.addColumn(由第列修改,“修改人”);
    documentTable.addColumn(DateColumn,“修改日期”);
    }
    返回文档表;
    }
    TextColumn idColumnD=新的TextColumn(){
    @凌驾
    公共字符串getValue(FDocumentobject){
    //TODO自动生成的方法存根
    返回object.getId();
    }
    };
    TextColumn nameColumnD=新的TextColumn(){
    @凌驾
    公共字符串getValue(FDocumentobject){
    返回object.getName();
    }
    };          
    TextColumn sizeColumnD=newtextcolumn(){
    @凌驾
    公共字符串getValue(FDocumentobject){
    返回object.getSize();
    }
    };
    TextColumn由修改的列d=新的TextColumn(){
    @凌驾
    公共字符串getValue(FilenetDocument对象){
    返回object.getModifiedBy();
    }
    };
    TextColumn dateColumnD=新的TextColumn(){
    @凌驾
    公共字符串getValue(FDocumentobject){
    返回object.getModifiedOn();
    } 
    };
    私有void addValuesToTable(){
    列表FDC=null;
    /*
    *向文件夹表添加数据
    */
    ArrayList documentsArrayList=新建ArrayList();
    迭代器迭代器文档=documents.getDocuments().getDocumentCollection().keySet().Iterator();
    while(iteratorDocument.hasNext()){
    String key=iteratorDocument.next().toString();
    FDocument value=documents.getDocuments().getDocumentCollection().get(键);
    添加(新的FDocument(value.getName()、value.getSize()、value.getModifiedBy()、value.getModifiedOn()、value.getId());
    }
    FDC=文件列表;
    //创建一个数据提供者。
    ListDataProvider dataProvider1=新ListDataProvider();
    //将表连接到数据提供程序。
    dataProvider1.addDataDisplay(documentTable);
    //将数据添加到数据提供程序,数据提供程序会自动将数据推送到小部件。
    List listDocument=dataProvider1.getList();
    for(FDocument FDocument:FDC){
    listDocument.add(fDocument1);
    }
    
    这就是我制作表格的方式和价值

    有人能告诉我程序吗

  • 在文档名称前添加图标

  • 我还想在名称列之前再加一个图像列


  • 要创建图像列,需要定义一个自定义渲染器,用于设置标签上的图标

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

    要创建图像列,需要定义一个自定义渲染器,用于设置标签上的图标

    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);
      }
    }
    
    使用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,请参阅以获取网格单元格式的示例代码。

    使用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,请参阅网格单元格式的示例代码。

    这两种格式都可能需要自定义的
    TableCellRenderer

    请参阅此处的API文档

    基本上,您希望覆盖
    gettableCellRenderComponent()
    方法,并添加用于渲染图像的任何附加代码

    例如,要在文档前添加图标,请执行以下操作

    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


    在向表中添加图像列时,您也可以执行类似的操作。

    这两种操作都可能需要自定义的
    TableCellRenderer

    请参阅此处的API文档

    基本上,您希望覆盖
    gettableCellRenderComponent()
    方法,并添加用于渲染图像的任何附加代码

    例如,要在文档前添加图标,请执行以下操作

    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


    您也可以在表中添加图像列时执行类似操作。

    对不起,我忘了提到我正在使用GWT。对不起,我忘了提到我正在使用GWT。对不起,我忘了提到我正在使用GWT。对不起,我忘了提到我正在使用GWT。对不起,我忘了提到我是美国ing GWT。