Java 带图像列的单元格表
我有4列的celltable(名称大小由modifiedBy添加) 在运行时填充所有值 该表实际显示了文件 文档可以是pdf、txt、doc等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
*
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。