无法编辑看似任意的JTable列

时间:2010-09-02 20:28:42

标签: java swing editor jtable

正如标题所述,我有一个JTable,我无法编辑“任意”列。我有4列,只有第一列可编辑。第一列有文件和特殊编辑器,接下来的两列有字符串,最后一列有整数。我正在使用自定义模型,我从isCellEditable方法返回 true 。当然,我先咨询了几个网站寻求帮助,但我找不到任何有帮助的网站。我使用java源代码覆盖了几个JTable方法并插入了print语句。特别是,我发现 table.editCellAt(row,col)总是返回false,因为从单元格编辑器返回的编辑组件始终为null。所以,我自然尝试使用table.setDefaultEditor(String.class, new MyEditor())替换编辑器。奇怪的是, DID NOT 工作。 String列的所有编辑器仍然是JTable默认使用的GenericEditor。然后,我尝试通过执行以下操作将编辑器添加到每个列:

TableColumnModel model = table.getColumnModel();
for(int i = 1; i < model.getColumnCount(); i++){
    model.getColumn(i).setCellEditor(new MyEditor());
}

请注意, i 从1开始,因为第一列已有适当的编辑器。我现在已经没有想法了,所以我来到Stack Overflow的好人那里寻求帮助。

编辑:我正在使用DefaultTableModel,我只是覆盖isCellEditable以确保它始终返回true(即使DefaultTableModel应该这样做是默认的)。我这样做是为了减少无用的,浪费的调试响应。此外,一列可编辑但其他列不可编辑的事实似乎表明问题出在其他地方。

编辑:如果创建列,则会出现问题。一位教授建议改变setAutoCreateColumnsFromModel,似乎已经解决了这个问题。

3 个答案:

答案 0 :(得分:1)

只需5行“自定义代码”来测试JTable的使用情况。其余代码是您将来可能创建的任何SSCCE的模板。

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        DefaultTableModel model = new DefaultTableModel(5, 3);
        JTable table = new JTable( model );
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("Basic SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new SSCCE() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

答案 1 :(得分:0)

我正在使用DefaultTableModel,我只是覆盖isCellEditable以确保它始终返回true(即使DefaultTableModel应该这样做是默认的)。我这样做是为了减少无用的,浪费的调试响应。此外,一列可编辑但其他列不可编辑的事实似乎表明问题出在其他地方。

答案 2 :(得分:0)

似乎问题在于创建列。一位教授建议改变setAutoCreateColumnsFromModel,似乎已经解决了这个问题。