1

私は4列のセルテーブルを持っています(名前サイズaddedBymodifiedBy)

すべての値は実行時に入力されます。

表は実際にドキュメントを示しています。

ドキュメントはpdf、txt、docのようになります

  1. ドキュメント名の前にアイコンを追加したい。

  2. また、名前列の前にもう1つの画像列が必要です

これまでの私のコード。

*
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. また、名前列の前にもう1つの画像列が必要です

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を使用している場合は、グリッドセル形式のサンプルコードについてはこちらをご覧ください。

于 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 に答える