java - 在 JTable 中添加 JSpinner 时出现非法参数异常
问题描述
所以我使用 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 ;
}
推荐阅读
- node.js - 有没有办法从 node-rdkafka 中的生产者队列缓冲区获取消息?
- javascript - 需要 Node JS 中间件功能
- mysql - MySQL ERROR 1415 (0A000): 不允许从函数返回结果集
- amazon-web-services - AWS StateMachine for Lambda,云形成语法
- c# - C#中心图片框在窗体内
- python - 在 Pandas 数据框列的子集上的管道中使用 scikit StandardScaler
- android - Android Studio 3.1.1 apk 下载量增加一倍以上
- android - 房间使用日期字段
- android - 我为我的计算器做了一个简单的布局。在 IDE 中看起来不错,但在我的手机上,mate 8 看起来完全不同
- pandas - 熊猫数据框重命名列