繁体   English   中英

如何重绘JTable的数据

[英]how to repaint the data of the JTable

我已经编写了以下方法来创建表但是每次调用任务列表时都会调用但是表不能更改表的值

 public void displayAllTaskByProjectId(Task[] task) {

    System.out.println("Success fully call");
    /**
     * The table to display tasks related to the selected project and timer
     * for that
     */
    tblTaskList = new JTable();
    LOG.info(" get here");
    int length;

    DefaultTableModel dm = new DefaultTableModel(0, 0) {
        private static final long serialVersionUID = 1L;

        public Class getColumnClass(int column) {
            return getValueAt(0, column).getClass();
        };

        public boolean isCellEditable(int row, int column) {
            switch (column) {
            case 5:
                return true;
            default:
                return false;
            }

        };
    };
    dm.fireTableDataChanged();
    String header[] = new String[] { "Prority", "Task Title", "Start",
            "Pause", "Stop", "Statulses" };
    dm.setColumnIdentifiers(header);

    // Add image icon in table
    ImageIcon imgStart = new ImageIcon("../../../../start.png");
    ImageIcon imgStop = new ImageIcon("../../../../stop.png");
    ImageIcon imgPause = new ImageIcon("../../../../pause.png");
    length = task.length;
    for (int count = 0; count < length; count++) {
        dm.addRow(new Object[] { count, task[count].getTaskTitle() + count,
                imgStart, imgPause, imgStop, "Active" });
    }
    tblTaskList.setModel(dm);
    TableColumn tbcStatus = tblTaskList.getColumnModel().getColumn(5);
    JComboBox cmbStatus = new JComboBox();
    cmbStatus.setModel(new DefaultComboBoxModel(new String[] { "Active",
            "Close", "Deactive", "Offline" }));
    tbcStatus.setCellEditor(new DefaultCellEditor(cmbStatus));

    tblTaskList.getColumnModel().getColumn(0).setMinWidth(0);
    tblTaskList.getColumnModel().getColumn(0).setMaxWidth(0);
    tblTaskList.getColumnModel().getColumn(1).setPreferredWidth(350);
    tblTaskList.getColumnModel().getColumn(2).setPreferredWidth(35);
    tblTaskList.getColumnModel().getColumn(3).setPreferredWidth(35);
    tblTaskList.getColumnModel().getColumn(4).setPreferredWidth(25);

    tblTaskList.getTableHeader().setReorderingAllowed(false);
    tblTaskList.getTableHeader().setResizingAllowed(false);
    tblTaskList.setBounds(93, 34, 614, 324);

    jspTasklist = new JScrollPane(tblTaskList);
    jspTasklist.setOpaque(false);
    jspTasklist.setFocusTraversalPolicyProvider(true);
    jspTasklist.setBounds(108, 34, 605, 335);
    frmTaskList.getContentPane().add(jspTasklist);
}

请尽快给我解决我的问题

请尽快给我解决我的问题

(尽快快速首发)

你应该只删除tblTask​​List = new JTable(); 从displayAllTask​​ByProjectId函数和代码将正常工作。仅在init组件时使用此行tblTask​​List = new JTable()

数据未刷新的问题是您在为表设置模型之前调用fireTableDataChanged

对代码进行了如下更改:

public void displayAllTask​​ByProjectId(Task [] task){

System.out.println("Success fully call");
/**
 * The table to display tasks related to the selected project and timer
 * for that
 */
tblTaskList = new JTable();
LOG.info(" get here");
int length;

DefaultTableModel dm = new DefaultTableModel(0, 0) {
    private static final long serialVersionUID = 1L;

    public Class getColumnClass(int column) {
        return getValueAt(0, column).getClass();
    };

    public boolean isCellEditable(int row, int column) {
        switch (column) {
        case 5:
            return true;
        default:
            return false;
        }

    };
};
tblTaskList.setModel(dm);

String header[] = new String[] { "Prority", "Task Title", "Start",
        "Pause", "Stop", "Statulses" };
dm.setColumnIdentifiers(header);

// Add image icon in table
ImageIcon imgStart = new ImageIcon("../../../../start.png");
ImageIcon imgStop = new ImageIcon("../../../../stop.png");
ImageIcon imgPause = new ImageIcon("../../../../pause.png");
length = task.length;
for (int count = 0; count < length; count++) {
    dm.addRow(new Object[] { count, task[count].getTaskTitle() + count,
            imgStart, imgPause, imgStop, "Active" });
}
dm.fireTableDataChanged();
TableColumn tbcStatus = tblTaskList.getColumnModel().getColumn(5);
JComboBox cmbStatus = new JComboBox();
cmbStatus.setModel(new DefaultComboBoxModel(new String[] { "Active",
        "Close", "Deactive", "Offline" }));
tbcStatus.setCellEditor(new DefaultCellEditor(cmbStatus));

tblTaskList.getColumnModel().getColumn(0).setMinWidth(0);
tblTaskList.getColumnModel().getColumn(0).setMaxWidth(0);
tblTaskList.getColumnModel().getColumn(1).setPreferredWidth(350);
tblTaskList.getColumnModel().getColumn(2).setPreferredWidth(35);
tblTaskList.getColumnModel().getColumn(3).setPreferredWidth(35);
tblTaskList.getColumnModel().getColumn(4).setPreferredWidth(25);

tblTaskList.getTableHeader().setReorderingAllowed(false);
tblTaskList.getTableHeader().setResizingAllowed(false);
tblTaskList.setBounds(93, 34, 614, 324);

jspTasklist = new JScrollPane(tblTaskList);
jspTasklist.setOpaque(false);
jspTasklist.setFocusTraversalPolicyProvider(true);
jspTasklist.setBounds(108, 34, 605, 335);
frmTaskList.getContentPane().add(jspTasklist);

}

请查看有关JTables的Swing Tutorial以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM