为什么我的model.addRow函数不起作用?

问题描述

代码的目标是向我的jTable添加一个对象。我有两个叫做Task和TaskUI的类。

我最初的期望是看到一个显示“有效任务详细信息”的MessageDialog,并将我的对象添加到jTable中。但是,唯一成功的事件是显示MessageDialog的程序。

我没有收到任何语法,逻辑或运行时错误消息。

我最初尝试按照循序渐进的方法通过以下视频创建待办事项列表:ToDo List in JAVA Netbeans,但我感到UI与工作代码之间没有足够的分隔。我的意思是,不能将后端“插入”适当使用所有方法的其他UI中。

请注意,我最近已经编辑了代码,但是,我需要添加addTask()方法的帮助

任务

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class Task {
private String name;
private String priority;
private String type;
private String time;
private boolean complete;

public Task(String name,String priority,String type,String time,boolean complete) {
    this.name = name;
    this.priority = priority;
    this.type = type;
    this.time = time;
    this.complete = complete;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPriority() {
    return priority;
}

public void setPriority(String priority) {
    this.priority = priority;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}

public boolean isComplete() {
    return complete;
}

public void setComplete(boolean complete) {
    this.complete = complete;
}

public class TaskTableModel extends AbstractTableModel {
    
    private String[] columnNames = {"Task","Priority","Type","Estimated Time","Status"};

    private List<Task> tasks;
    
    public TaskTableModel() {
        tasks = new ArrayList<Task>();
    }
    
    public TaskTableModel(List<Task> tasks) {
        this.tasks = tasks;
    }
    
    @Override
    public int getColumnCount() {
        return columnNames.length;
    }
    
    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }
    
    @Override
    public int getRowCount() {
        return tasks.size();
    }        

    @Override
    public Class getColumnClass(int column) {
        switch (column) {
            case 4: return boolean.class;
            default: return String.class;
        }
    }
    
    @Override
    public boolean isCellEditable(int row,int column) {
        switch (column) {
            case 4: return true;
            default: return false;
        }
    }
    
    @Override
    public Object getValueAt(int row,int column) {
        Task task = getTask(row);
        switch (column) {
            case 0: return task.getName();
            case 1: return task.getPriority();
            case 2: return task.getType();
            case 3: return task.getTime();
            case 4: return task.isComplete();
            default: return null;
        }
    }
    
    @Override
    public void setValueAt(Object value,int row,int column) {
        Task task = getTask(row);
        switch (column) {
            case 0: task.setName((String)value);  
            break;
            case 1: task.setPriority((String)value);
            break;
            case 2: task.setType((String)value);
            break;
            case 3: task.setTime((String)value);
            break;
            case 4: task.setComplete((boolean)value);
            break;
        }
        fireTableCellUpdated(row,column);
    }
    
    public Task getTask(int row) {
        return tasks.get(row);
    }
    
    public void addTask(Task task) {
        insertTask(getRowCount(),task);
    }
    
    public void insertTask(int row,Task task) {
        tasks.add(row,task);
        fireTableRowsInserted(row,row);
    }
    
    public void removeTask(int row) {
        tasks.remove(row);
        fireTableRowsDeleted(row,row);
    }
}//end TaskTableModel

@Override
public String toString() {
    return "Task{" + "name=" + name + ",priority=" + priority + ",type=" + type + ",time=" + time + ",complete=" + complete + '}';
}
}//end Task

TaskUI

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

public class TaskUI extends javax.swing.JFrame {
   boolean validTask;
   Task obj;
   DefaultTableModel model = new DefaultTableModel();

   /**
   * Creates new form TaskUI
   */
   public TaskUI() {
       initComponents();
   }

  private void btnMakeObjectActionPerformed(java.awt.event.ActionEvent evt) {                                              
    String name = txfTask.getText();
    String priority = (String) cmbPriority.getSelectedItem();
    String type = (String) cmbType.getSelectedItem();
    String time = txfTime.getText();
    boolean complete = false;
    if(txfTask.getText().length() > 0 && cmbPriority.getSelectedItem() != "--" && cmbType.getSelectedItem() != "--" && txfTime.getText().length() > 0) {
        JOptionPane.showMessageDialog(null,"Valid Task Details");
        validTask = true;
        obj = new Task (name,priority,type,time,complete);
        /**The following error message appears when adding the addTask(...) method:
         * cannot find symbol
         * symbol:   method addTask(Object[])
         * location: variable model of type DefaultTableModel
         */
        model.addTask(new Object[]{tblTaskInfo.getRowCount()+1,obj});
    }
    else {
        JOptionPane.showMessageDialog(null,"Invalid Task Details");
    }   
}

}

这是我的用户界面的图片 enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)