根据javatotourial,我们作了一个测试的编辑器
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
public class AbstractTextTableCellEditor extends AbstractCellEditor
implements TableCellEditor
{
JTextField txt = new JTextField();
String str= null;
public Object getCellEditorValue() {
return str;
} public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column) {
if(value!=null)
{
txt.setText(value.toString());
}
str = (String)value;
return txt;
}
}大家如果测试可以用这个表格package test.swing.table;import java.awt.BorderLayout;
import java.awt.Container;
import java.util.Set;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerEditor;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerField;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerTableCellEditor;
import com.huawei.etl.client.metaserver.plan.test.IntTableCellEditor;
import com.huawei.etl.meta.model.oci.OciExtractParallelRule;
import com.huawei.etl.util.swing.JTableUtils;public class TestTable
{ JTable table = null;
public TestTable()
{
table = new JTable(new TestTableModel(buildTableHeader()));
table.setDefaultEditor(Integer.class, new IntegerTableCellEditor(
new IntegerField(0, 500)));
//我将编辑器装在第3列
table.getColumnModel().getColumn(3).setCellEditor(
new AbstractTextTableCellEditor());
JScrollPane sp = new JScrollPane(table);
JFrame f = new JFrame("表");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container con = f.getContentPane();
con.setLayout(new BorderLayout());
con.add(sp, BorderLayout.CENTER);
f.setSize(300, 300);
f.setLocationRelativeTo(null);
f.pack();
f.setVisible(true);
}
private Object[] buildTableHeader()
{
Object[] tableHeader = new Object[] { "序号", "比例因子%", "整数编辑器", "规则" };
return tableHeader;
}
public static void main(String[] args)
{
TestTable tt = new TestTable();
}}
class TestTableModel extends DefaultTableModel
{
Object[][] content = new Object[500][4]; Object[] header = null;
public TestTableModel(Object[] tableHeader)
{
this.header = tableHeader;
} public int getColumnCount()
{
return this.header.length;
}
public int getRowCount()
{
if (null == this.content)
{
return 0;
}
else
{
return this.content.length;
}
}
public Object getValueAt(int row, int col)
{
return this.content[row][col];
}
public String getColumnName(int col)
{
return this.header[col].toString();
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
if (columnIndex > 0)
{
return true;
}
return false;
}
public void setValueAt(Object value, int row, int col)
{
this.content[row][col] = value;
this.fireTableCellUpdated(row, col);
}
public Class getColumnClass(int columnIndex)
{
if (null == content[0][columnIndex])
{
if (columnIndex == 1)
{
return Integer.class;
}
else
{
return String.class;
}
}
else
{
return content[0][columnIndex].getClass();
}
}
}各位大虾也可以自己作一个表格,然后安装好我的那个编辑器我将编辑器装在第3列,但是在编辑表格的时候出现一个问题:
就是当我输入(任意)字符串后都会在另外一个cell重复显示什么意思?比方你在第一个cell(当然是在第3列)
输入"abc"
当你点击该列的其他cell时,都会显示"abc"
我的编辑器根本就没有static变量,真不知道它是怎么保存下这个值,归根结底,还是对
表格编辑的机制不清晰
另外我没有安装绘制器,所以就是默认的,但是这应该只是一个编辑器,
不安装对应的绘制器应该没有关系
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
public class AbstractTextTableCellEditor extends AbstractCellEditor
implements TableCellEditor
{
JTextField txt = new JTextField();
String str= null;
public Object getCellEditorValue() {
return str;
} public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column) {
if(value!=null)
{
txt.setText(value.toString());
}
str = (String)value;
return txt;
}
}大家如果测试可以用这个表格package test.swing.table;import java.awt.BorderLayout;
import java.awt.Container;
import java.util.Set;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerEditor;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerField;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerTableCellEditor;
import com.huawei.etl.client.metaserver.plan.test.IntTableCellEditor;
import com.huawei.etl.meta.model.oci.OciExtractParallelRule;
import com.huawei.etl.util.swing.JTableUtils;public class TestTable
{ JTable table = null;
public TestTable()
{
table = new JTable(new TestTableModel(buildTableHeader()));
table.setDefaultEditor(Integer.class, new IntegerTableCellEditor(
new IntegerField(0, 500)));
//我将编辑器装在第3列
table.getColumnModel().getColumn(3).setCellEditor(
new AbstractTextTableCellEditor());
JScrollPane sp = new JScrollPane(table);
JFrame f = new JFrame("表");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container con = f.getContentPane();
con.setLayout(new BorderLayout());
con.add(sp, BorderLayout.CENTER);
f.setSize(300, 300);
f.setLocationRelativeTo(null);
f.pack();
f.setVisible(true);
}
private Object[] buildTableHeader()
{
Object[] tableHeader = new Object[] { "序号", "比例因子%", "整数编辑器", "规则" };
return tableHeader;
}
public static void main(String[] args)
{
TestTable tt = new TestTable();
}}
class TestTableModel extends DefaultTableModel
{
Object[][] content = new Object[500][4]; Object[] header = null;
public TestTableModel(Object[] tableHeader)
{
this.header = tableHeader;
} public int getColumnCount()
{
return this.header.length;
}
public int getRowCount()
{
if (null == this.content)
{
return 0;
}
else
{
return this.content.length;
}
}
public Object getValueAt(int row, int col)
{
return this.content[row][col];
}
public String getColumnName(int col)
{
return this.header[col].toString();
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
if (columnIndex > 0)
{
return true;
}
return false;
}
public void setValueAt(Object value, int row, int col)
{
this.content[row][col] = value;
this.fireTableCellUpdated(row, col);
}
public Class getColumnClass(int columnIndex)
{
if (null == content[0][columnIndex])
{
if (columnIndex == 1)
{
return Integer.class;
}
else
{
return String.class;
}
}
else
{
return content[0][columnIndex].getClass();
}
}
}各位大虾也可以自己作一个表格,然后安装好我的那个编辑器我将编辑器装在第3列,但是在编辑表格的时候出现一个问题:
就是当我输入(任意)字符串后都会在另外一个cell重复显示什么意思?比方你在第一个cell(当然是在第3列)
输入"abc"
当你点击该列的其他cell时,都会显示"abc"
我的编辑器根本就没有static变量,真不知道它是怎么保存下这个值,归根结底,还是对
表格编辑的机制不清晰
另外我没有安装绘制器,所以就是默认的,但是这应该只是一个编辑器,
不安装对应的绘制器应该没有关系
package test.swing.table;import java.awt.BorderLayout;
import java.awt.Container;
import java.util.Set;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerEditor;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerField;
import com.huawei.etl.client.metaserver.plan.tabeditor.IntegerTableCellEditor;
import com.huawei.etl.client.metaserver.plan.test.IntTableCellEditor;
import com.huawei.etl.meta.model.oci.OciExtractParallelRule;
import com.huawei.etl.util.swing.JTableUtils;
public class TestTable
{ JTable table = null;
public TestTable()
{
table = new JTable(new TestTableModel(buildTableHeader())); //我将编辑器装在第3列
table.getColumnModel().getColumn(3).setCellEditor(
new AbstractTextTableCellEditor());
JScrollPane sp = new JScrollPane(table);
JFrame f = new JFrame("表");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container con = f.getContentPane();
con.setLayout(new BorderLayout());
con.add(sp, BorderLayout.CENTER);
f.setSize(300, 300);
f.setLocationRelativeTo(null);
f.pack();
f.setVisible(true);
}
private Object[] buildTableHeader()
{
Object[] tableHeader = new Object[] { "序号", "比例因子%", "整数编辑器", "规则" };
return tableHeader;
}
public static void main(String[] args)
{
TestTable tt = new TestTable();
}}
class TestTableModel extends DefaultTableModel
{
Object[][] content = new Object[500][4]; Object[] header = null;
public TestTableModel(Object[] tableHeader)
{
this.header = tableHeader;
} public int getColumnCount()
{
return this.header.length;
}
public int getRowCount()
{
if (null == this.content)
{
return 0;
}
else
{
return this.content.length;
}
}
public Object getValueAt(int row, int col)
{
return this.content[row][col];
}
public String getColumnName(int col)
{
return this.header[col].toString();
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
if (columnIndex > 0)
{
return true;
}
return false;
}
public void setValueAt(Object value, int row, int col)
{
this.content[row][col] = value;
this.fireTableCellUpdated(row, col);
}
public Class getColumnClass(int columnIndex)
{
if (null == content[0][columnIndex])
{
if (columnIndex == 1)
{
return Integer.class;
}
else
{
return String.class;
}
}
else
{
return content[0][columnIndex].getClass();
}
}
}