Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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:为什么';不能使用TableCellEditor吗?_Java_Jtable_Tablecelleditor - Fatal编程技术网

Java:为什么';不能使用TableCellEditor吗?

Java:为什么';不能使用TableCellEditor吗?,java,jtable,tablecelleditor,Java,Jtable,Tablecelleditor,MyTableCellEditor的目的是使JTable单元格的行为类似于Excel单元格,IOW,在单元格中单击后输入值将覆盖而不是附加到现有值。 我不希望下面的代码在第一次通过时能够工作,但我确实希望在getTableCellEditorComponent和getCellEditorValue中遇到调试断点。 为什么在使用jTable时不调用getTableCellEditorComponent或getCellEditorValue public class MyTable extends

MyTableCellEditor的目的是使JTable单元格的行为类似于Excel单元格,IOW,在单元格中单击后输入值将覆盖而不是附加到现有值。 我不希望下面的代码在第一次通过时能够工作,但我确实希望在getTableCellEditorComponent和getCellEditorValue中遇到调试断点。 为什么在使用jTable时不调用getTableCellEditorComponent或getCellEditorValue

public class MyTable extends javax.swing.JFrame implements TableModelListener {
    private static final MyTableCellEditor tableCellEditor =
        new MyTableCellEditor();
        ...
    public MyTable() {
        initComponents();
        jTable.getModel().addTableModelListener(MyTable.this);
        ...
    private void initComponents() { // Generated by the Form Editor.
        jTable = new javax.swing.JTable();
        jTable.setCellEditor(tableCellEditor);
        ...
public class MyTableCellEditor extends AbstractCellEditor implements
        TableCellEditor {
    JComponent component = new JTextField();
    public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int rowIndex, int vColIndex) {
        if (isSelected) {
            ((JTextField)component).selectAll();
        }
        ((JTextField)component).setText((String)value);
        return component;
    }
    public Object getCellEditorValue() {
        return ((JTextField)component).getText();
    }
}
setCellEditor(TableCellEditor)
仅为当前活动单元格设置编辑器(一旦不再活动,编辑器将丢失)。您要调用
JTable.setDefaultEditor()
为特定类设置默认编辑器

jTable.setDefaultEditor(String.class, tableCellEditor);
或者,您可以通过
TableColumnModel
为列设置编辑器,例如

jTable.getColumnModel().getColumn(1).setCellEditor(tableCellEditor);

不相关,但为什么不将
组件
声明为
JTextField
并避免大量的强制转换呢?这两行代码似乎都没有任何作用:(任何可能的原因?