Получение исключения недопустимого аргумента при добавлении JSpinner в JTable

поэтому я добавляю JSpinner внутри ячейки Jtable, используя классы AbstractCellEditor и TableCellEditor. Класс 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)

Не могу понять в чем проблема! заранее спасибо

Вы читали API JSpinner для метода setValue(...)? Это объясняет, почему вы получаете исключение IllegalArguementException. У нас недостаточно информации, чтобы дать вам конкретный ответ, кроме как сказать, что данные в таблице не соответствуют ожиданиям счетчика. Публикуйте правильный минимальный воспроизводимый пример каждый раз, когда задаете вопрос, чтобы мы точно знали, что вы делаете.

camickr 23.06.2019 21:11

я видел пример из java2s.com/Code/Java/Swing-JFC/… и пробовал точно такой же код, даже если возникает такое же исключение

parbhat 24.06.2019 07:52

да, я прочитал документацию на oracle.com: public void setValue (значение объекта) Изменяет текущее значение модели, обычно это значение отображается редактором. Если реализация SpinnerModel не поддерживает указанное значение, создается исключение IllegalArgumentException. Этот метод просто делегирует модель. Это эквивалентно: getModel().setValue(value) Выдает: IllegalArgumentException - если значение не разрешено См. также: getValue(), SpinnerModel.setValue(java.lang.Object), но почему значение не поддерживается? значение - значение объекта i

parbhat 24.06.2019 07:53

я просто хочу добавить JSpinner в ячейку JTable, пожалуйста, скажите мне, как это сделать, я пробовал мой приведенный выше код или, пожалуйста, поделитесь ссылкой на пример, из которой я могу получить помощь

parbhat 24.06.2019 07:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
359
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты должен попытаться:

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 ;
    }

Другие вопросы по теме

Похожие вопросы

Есть ли способ удалить определенный блок, если он помещен поверх другого определенного блока?
Почему вызов put() не компилируется в Kotlin, когда он компилируется в Java с аналогичным кодом
Среда виртуальной файловой системы для программного обеспечения, выполняемого через процесс Java
Почему этот код для проверки сбалансированности бинарного дерева требует времени O(n log n), когда он повторно вычисляет глубины несколько раз?
Почему я получаю сообщение об ошибке «Файл не найден» для ExifInterface с Android?
Как исправить классы проекта, имеющие нежелательный подкласс R
Как скомпилировать Java в Native с помощью GraalVM (SubstrateVM) в Eclipse
Какие типы mime можно использовать для экспорта Google Sites, Google Forms и Google Scripts с помощью API Google Диска?
Устранение нестандартной ошибки OutOfMemoryError: невозможно создать новый собственный поток
Как BouncyCastle генерирует «ключи» ECDH?