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

Java 为什么我的model.addRow函数不起作用?,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,代码的目标是向我的jTable添加一个对象。我有两个类叫做Task和TaskUI 我最初的期望是看到一个显示“有效任务详细信息”的MessageDialog,并将我的对象添加到jTable中。但是,唯一成功的事件是显示MessageDialog的程序 我没有收到任何语法、逻辑或运行时错误消息 我最初试图通过这个视频一步一步地创建一个待办事项列表:但我觉得UI和工作代码之间没有足够的分离。我的意思是,后端不能“插入”到适当使用所有方法的不同UI中 请注意,我最近编辑了代码,但是,我需要帮助添加ad

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

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

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

我最初试图通过这个视频一步一步地创建一个待办事项列表:但我觉得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
}

这是我的用户界面的图片

代码的目标是向我的jTable中添加一个对象-什么表?您的代码所做的就是创建一个模型。从不将模型添加到表格或表格添加到框架。此外,不能将自定义对象(任务)直接添加到DefaultTableModel。模型将不知道如何显示数据。您需要创建一个自定义表模型。请参阅:有关如何为任务对象创建自定义模型的示例。@camickr我已按照您发送的链接上的指导原则进行了操作,但我不确定如何将其实现到我的TaskUI类中,在该类中我将使用jTable swing控件。Only(或任何其他非普通对象,除了
BigDecimal
对象)。不要使用
=
==
或任何其他此类表达式。应用于代码片段的一部分,例如:不要写入
cmpriority.getSelectedItem()!=“--”
,而不是写
!CMBRIORITY.getSelectedItem()等于(“--”)值
。对代码中的字符串进行任何比较时,请执行此操作。使用此操作的方式与使用任何TableModel的方式相同,但1)创建“Task”对象,然后2)调用addTask(…)方法将Task对象添加到模型中。如果需要更多帮助,请发布适当的命令。@camickr我已经在TaskUI类中创建了我的Task对象,但是,我无法对TaskUI调用addTask(…)方法。你能解释一下为什么和怎么做吗?提前谢谢。你真的帮助了我。
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");
    }   
}