正如标题所述,我有一个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
,似乎已经解决了这个问题。
答案 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
,似乎已经解决了这个问题。