java - 在 JTable 中添加 JSpinner 时出现非法参数异常

标签 java swing

所以我使用 AbstractCellEditor 和 TableCellEditor 类在 Jtable 的单元格内添加 JSpinner mt SpinnerEditor 类非常简单,代码如下:

public class SpinnerEditor extends AbstractCellEditor implements TableCellEditor {

    final JSpinner spinner;
    SpinnerEditor(){
        spinner = new JSpinner();
    }

    @Override
    public Object getCellEditorValue() {
        return spinner.getValue();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        spinner.setValue(value);
        return spinner ;
    }

    @Override
    public boolean isCellEditable(EventObject evt){

    return true;
    }

}

问题是当我尝试通过单击单元格来编辑单元格时,我收到非法参数异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal value
    at javax.swing.SpinnerNumberModel.setValue(SpinnerNumberModel.java:443)
    at javax.swing.JSpinner.setValue(JSpinner.java:354)
    at timetablemgmt.SpinnerEditor.getTableCellEditorComponent(SpinnerEditor.java:39)
    at javax.swing.JTable.prepareEditor(JTable.java:5778)
    at javax.swing.JTable.editCellAt(JTable.java:3512)
    at javax.swing.plaf.basic.BasicTableUI$Handler.adjustSelection(BasicTableUI.java:1108)
    at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1038)
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
    at java.awt.Component.processMouseEvent(Component.java:6530)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2237)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2295)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4523)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
    at java.awt.Container.dispatchEventImpl(Container.java:2281)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我不知道问题出在哪里! 提前致谢

最佳答案

你应该尝试:

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        spinner.setValue(value);
        return spinner ;
    }


public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        if(value == null)
           spinner.setValue(0);
        else
           spinner.setValue(value);
        return spinner ;
    }

关于java - 在 JTable 中添加 JSpinner 时出现非法参数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56726971/

相关文章:

java - RabbitMQ Java 客户端 - 如何明智地处理异常和关闭?

java - 线性搜索多个整数

java - 为 Java jUnit 测试创建一个 MultipartFormDataInput 对象

java - 将 DLL 导入 Eclipse Java 项目

java - 系统托盘文本而不是图标

java - 从另一个子JFrame发送数据到JFrame而不打开新的JFrame

java - 当我尝试从 git 更新项目时出现此错误 : Couldn't save uncommitted changes

java - Swing:一列的多个 CellEditor

java - 动态添加 JPanel 时大小计算错误

java - 编辑 JTable 后获取选定的行和列