gpt4 book ai didi

java - 无法编辑看似任意的 JTable 列

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:41 26 4
gpt4 key购买 nike

正如标题所述,我有一个 JTable 并且无法编辑“任意”列。我有 4 列,只有第一列是可编辑的。第一列有文件和一个特殊编辑器,接下来的两列有字符串,最后一列有整数。我使用的是自定义模型,并且从 isCellEditable 方法返回 true。当然,我首先查阅了几个网站寻求帮助,但我找不到任何有帮助的东西。我使用java源代码重写了几个JTable方法并插入打印语句。特别是,我发现 table.editCellAt(row, col) 总是返回 false,因为从单元格编辑器返回的编辑组件始终为 null。因此,我很自然地尝试使用 table.setDefaultEditor(String.class, new MyEditor()) 替换编辑器。奇怪的是,这不起作用。 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,它似乎已经解决了问题。

最佳答案

只需要 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();
}
});
}
}

关于java - 无法编辑看似任意的 JTable 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com