Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 摆动式旋转柱_Java_Swing_Jtable_Jspinner - Fatal编程技术网

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
,那么它应该会处理它,但您没有提供该信息,所以我只是强调一下