如何在编辑JTable的JSpinner单元

时间:2017-08-20 12:09:27

标签: java swing jtable tablecellrenderer

通过使用DefaultTableRenderer JTable应用于我设置为包含JSpinnerJComboBox的{​​{1}}时出现问题>

我创建了一个简单的DefaultCellEditors,用于检查是否存在重复时间或无效时间值,如下所示。

DefaultTableRenderer

如果用户选择与其他人重复或冲突的时间,我希望将行着色为红色。 在用户选择时间并移至下一列后,必须进行行颜色的渲染或更改。

如果 startTime 等于 endTime ,我尝试重新应用DefaultRenderer来刷新行颜色,但它不起作用。我想我做错了。

enter image description here

我试图重新应用我在JSpinner状态发生变化但没有运气时创建的渲染器。

public class ScheduleTableCellRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(
            JTable table, Object value,
            boolean isSelected, boolean hasFocus,
            int row, int col) {

        Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);

        Object startTimeValue = table.getModel().getValueAt(row, 1);
        Object endTimeValue = table.getModel().getValueAt(row,2);
        if(startTimeValue!= null && endTimeValue != null && 
                startTimeValue.toString().equals(endTimeValue.toString()) ){
            System.out.print("Start Time: "+startTimeValue+", ");
            System.out.println(endTimeValue+"\n");
            cellComponent.setBackground(Color.RED);
            ((JLabel)cellComponent).setForeground(Color.WHITE);
        }

        if(row%2 == 0){
            cellComponent.setBackground(Color.CYAN);
            ((JLabel)cellComponent).setForeground(Color.BLACK);
        }
        else{
            cellComponent.setBackground(Color.WHITE);
            ((JLabel)cellComponent).setForeground(Color.BLACK);
        }

        return cellComponent;
    }

}

我能做到这一点的最简单方法是什么。

我很感激任何帮助。

谢谢。

0 个答案:

没有答案