Java 摆动式旋转柱
我有一个类,用于在Java 摆动式旋转柱,java,swing,jtable,jspinner,Java,Swing,Jtable,Jspinner,我有一个类,用于在JTable中创建基于JSpinner框的列。但是,我有一个问题,当我编辑新行中的值时,微调器框的旧值会显示在新单元格中。例如,如果我将第1行中的值设置为3,然后移动到第2行,则微调器的最小值从3开始,而不是从0开始。有人能建议一种改变这种行为的方法吗 我在想,可能我需要为每一行设置一个单独的微调器框,并且我必须维护一个到微调器框的行数映射,但是,我觉得应该有更好的解决方案可用 public class SpinnerColumn extends AbstractCellEdi
JTable
中创建基于JSpinner
框的列。但是,我有一个问题,当我编辑新行中的值时,微调器框的旧值会显示在新单元格中。例如,如果我将第1行中的值设置为3,然后移动到第2行,则微调器的最小值从3开始,而不是从0开始。有人能建议一种改变这种行为的方法吗
我在想,可能我需要为每一行设置一个单独的微调器框,并且我必须维护一个到微调器框的行数映射,但是,我觉得应该有更好的解决方案可用
public class SpinnerColumn extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
private final JSpinner spinner = new JSpinner();
private JTable table;
public SpinnerColumn(JTable table, int column)
{
this.table = table;
table.getColumnModel().getColumn(column).setCellEditor(this);
}
@Override
public Object getCellEditorValue()
{
return this.spinner.getValue();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column)
{
if (isSelected)
{
spinner.setValue(value);
}
return spinner;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
return spinner;
}
}
在getCellEditorValue中,调用spinner.commit()将微调器中的值提交给模型。这是因为在微调器收到焦点丢失的通知之前调用了getCellEditorValue方法。因此,请确保在TableModel中正确实现了setValueAt。请详细说明TableModel中的setValueAt方法,好吗?我需要在我自己的DefaultTableModel实现中重写该方法吗?如果您使用的是
DefaultTableModel
,那么它应该会处理它,但您没有提供这些信息,所以我只是在getCellEditorValue中强调了这一点,调用spinner.commit()将微调器中的值提交给模型。这是因为在微调器收到焦点丢失的通知之前调用了getCellEditorValue方法。因此,请确保在TableModel中正确实现了setValueAt。请详细说明TableModel中的setValueAt方法,好吗?我需要在我自己的DefaultTableModel实现中重写该方法吗?如果您使用的是DefaultTableModel
,那么它应该会处理它,但您没有提供该信息,所以我只是强调一下