поэтому я добавляю 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)
Не могу понять в чем проблема! заранее спасибо
я видел пример из java2s.com/Code/Java/Swing-JFC/… и пробовал точно такой же код, даже если возникает такое же исключение
да, я прочитал документацию на oracle.com: public void setValue (значение объекта) Изменяет текущее значение модели, обычно это значение отображается редактором. Если реализация SpinnerModel не поддерживает указанное значение, создается исключение IllegalArgumentException. Этот метод просто делегирует модель. Это эквивалентно: getModel().setValue(value) Выдает: IllegalArgumentException - если значение не разрешено См. также: getValue(), SpinnerModel.setValue(java.lang.Object), но почему значение не поддерживается? значение - значение объекта i
я просто хочу добавить JSpinner в ячейку JTable, пожалуйста, скажите мне, как это сделать, я пробовал мой приведенный выше код или, пожалуйста, поделитесь ссылкой на пример, из которой я могу получить помощь




Ты должен попытаться:
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 ;
}
Вы читали API JSpinner для метода setValue(...)? Это объясняет, почему вы получаете исключение IllegalArguementException. У нас недостаточно информации, чтобы дать вам конкретный ответ, кроме как сказать, что данные в таблице не соответствуют ожиданиям счетчика. Публикуйте правильный минимальный воспроизводимый пример каждый раз, когда задаете вопрос, чтобы мы точно знали, что вы делаете.