有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在编辑JTable的JSpinner单元格后重新应用或重新提交我的JTable

我在将DefaultTableRenderer应用于JTable时遇到问题,我通过使用DefaultCellEditors将其设置为包含JSpinnerJComboBox

我创建了一个简单的DefaultTableRenderer,检查是否有重复的时间或无效的时间值,如下所示

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;
    }

}

如果用户选择的时间重复或与其他时间冲突,我想将行涂成红色必须在用户选择时间并移动到下一列后渲染或更改行颜色

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

enter image description here

我试图重新应用在JSpinner的状态更改时创建的渲染器,但没有成功

public class ScheduleTimeCellEditor extends DefaultCellEditor {
    private final JSpinner spinner;
    private final SpinnerDateModel spinnerDateModel; 

        public ScheduleTimeCellEditor(JTable jtblSchedule) {
            super(new JTextField());
            this.jtblSchedule = jtblSchedule;
            spinnerDateModel = new SpinnerDateModel();
            spinner.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                jtblSchedule.setDefaultRenderer(new ScheduleTableCellRenderer);
            }
        });
    }
}

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

我很感激任何帮助

谢谢


共 (0) 个答案