簡體   English   中英

數據庫數據不會填充到JTable中

[英]Database data doesn't fill into JTable

我已經在這個代碼上工作了幾天。 我在數據庫上的過程工作正常,但它沒有填入表中。 我一次又一次地瀏覽代碼但是我找不到什么錯誤...我得到的錯誤是:JavaNullPointerException和涉及的行是返回notes.length的代碼notes.length 這是我的一段代碼:

private Object[][] notes = null;
setUpStatusColumn(noteTable, noteTable.getColumnModel().getColumn(2));

protected JTable createTable(GradesModel gradesModel) {
        return new JTable(gradesModel);
    }

    public void setUpStatusColumn(JTable table, TableColumn statusColumn) {

        statusCombo = new JComboBox();
        statusCombo.addItem("OTOCLOSED");
        statusCombo.addItem("INPROGRESS");
        statusCombo.addItem("OPEN");
        statusCombo.addItem("CLOSED");
        statusColumn.setCellEditor(new DefaultCellEditor(statusCombo));

        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setToolTipText("Click to select Note Status");
        statusColumn.setCellRenderer(renderer);

    }

private class GradesModel extends AbstractTableModel {

        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

            notes[rowIndex][columnIndex] = aValue;
            fireTableCellUpdated(rowIndex, columnIndex);
        }

        public void addTableModelListener(TableModelListener l) {
        }

        public void removeTableModelListener(TableModelListener l) {
        }

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            if (columnIndex == 0 || columnIndex == 1 || columnIndex == 4 || columnIndex == 5)
                return false;
            else
                return true;

        }

        public Class<?> getColumnClass(int col) {
            switch (col) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                return String.class;
            }

            throw new AssertionError("invalid column");
        }

        public int getRowCount() {
            return notes.length;
        }

        public int getColumnCount() {
            return 6;
        }

        public String getColumnName(int col) {
            switch (col) {
            case 0:
                return "ETT Date";
            case 1:
                return "Control Name";
            case 2:
                return "Note Status Type";
            case 3:
                return "Note Log Desc";
            case 4:
                return "Note Log Date Time";
            case 5:
                return "Update/Insert";
            }

            throw new AssertionError("invalid column");
        }

        public Object getValueAt(int row, int col) {

            for (int i = 0; i < 6; i++) {
                if (col == i)
                    return notes[row][col];
            }

            throw new AssertionError("invalid column");
        }


    }

public void getTableData() throws Exception {
        Vector<AlarmLog> alarmLog = null;
        alarmLog = RepositoryHandler.getGlobalRepository().getAlarmLog(
                alarmId);

        notes = new Object[alarmLog.size() ][5];
        java.util.Iterator<AlarmLog> ite = alarmLog.iterator();
        int i = 0;

        GradesModel myModel=(GradesModel)noteTable.getModel();

        while(ite.hasNext()){
            AlarmLog aLog = ite.next();
            myModel.setValueAt(aLog.getEttDate(), i, 0);
            myModel.setValueAt(aLog.getControlName(), i, 1);
            myModel.setValueAt(aLog.getAlarmStatusType(), i, 2);
            myModel.setValueAt(aLog.getAlarmLogDesc(), i, 3);
            myModel.setValueAt(aLog.getAlarmLogDateTime(), i, 4);
            myModel.setValueAt(1, i, 5);
            i++;
        }           
        // fill table code
        noteTable.repaint();

        //setModel

    }
public void getDataFromTable() {
        int columnCount = noteTable.getModel().getColumnCount();
        int rowCount = noteTable.getModel().getRowCount();
        Object[][] objArray = new Object[rowCount][columnCount];
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < columnCount; j++) {
                objArray[i][j] = noteTable.getModel().getValueAt(i, j);
            }
        }
    }

你想念方法setValueAt()用於向JTable添加新數據,應該快速修改你的方法public void getTableData() throws Exception {

1)不要在EDT上運行硬編碼和長代碼,因為Swing GUI等待所有方法完成

2)我會使用DefaultTableModel代替...,然后你忘記了AbstractTableModel覆蓋方法

3)您的AbstractTableModel必須包含正確的fireXxxXxx方法而不是noteTable.repaint();

4)我看到另一個......,但是通過使用DefaultTableModel你永遠不能解決這個問題,因為這些方法是默認實現的

5)我擔心你在運行時使用它的模型重新創建JTable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM