更新数据库后如何使JTable显示刷新的数据? [英] How to make JTable show refreshed data after updating database?

查看:73
本文介绍了更新数据库后如何使JTable显示刷新的数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经更新了数据库,我想刷新JTable,并将此代码与按钮单击事件绑定在一起,但是它不起作用.当我关闭并再次打开它时,JTable显示正确的数据.

I have updated a database and I would like to refresh a JTable with this code tied to a button click event, but it doesn't work. When I close aplication and open it again JTable shows the right data.

我需要重写抽象表上的某些方法吗?

Do I need to override some method on my abstract table?

try {
        model=new MyTableModel(this.database);
        table = new JTable(model);
    } catch (SQLException e) {

        e.printStackTrace();
    }

scrollPane = new JScrollPane(table);

refresh.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

        ((MyTableModel)table.getModel()).fireTableDataChanged();

    }
});

 class MyTableModel extends AbstractTableModel {
    private int i;
    private String[] columnNames = { "ID", "Code", "Country", "Radio",
            "primljeno", "select" };

    private Object[][] data = { { new Integer(0), "", "", "", "",
            new Boolean(false) } };

    public MyTableModel(My_class_Database database)throws SQLException {
            init(database);


    }
    public void init(My_class_Database database) throws SQLException
    {
        this.i = database.checkIsDataThere();
        Object[][] object;
        if (i == 0) {
            object = new Object[i][7];
            object = database.getDatafromDatabase(this.i);
            this.data = object;
            dataAp = object;

        } else {
            object = database.getDatafromDatabase(this.i);
            textField.setText("No data in database");
        }

    }

    public int getColumnCount() {
        return columnNames.length;
    }

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

    public Object getValueAt(int row, int col) {
        return data[row][col];

    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public void setValueAt(Object value, int row, int col) {

        data[row][col] = value;
        fireTableCellUpdated(row, col);

    }

    // problem sa null vrijednostima,null exception
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        if (col > 4) {
            return true;
        } else
            return (false);
    }

}

推荐答案

由于模型本身(已发布代码),模型无法识别数据库中的修改.您可以刷新模型中的数据,例如调用现有的init()方法或创建类似的方法.或者,您可以构建一个新模型并在表上重置它.

As it is (posted code) the model is not aware of the modification in the database. You could either refresh the data in the model, such as calling existing init() method or creating a similar one. As an alternative, you can build a new model and reset it on the table.

模型负责触发您在actionPerformed中使用的通知,例如fireTableDataChanged.表客户端不应执行这些方法.例如,fireTableDataChanged属于init()方法.有关更多详细信息和示例,请参见触发数据更改事件.

It is the responsibility of the model to fire notifications such as fireTableDataChanged that you use in actionPerformed. Table clients should not execute these methods. fireTableDataChanged belongs to init() method for example. See Firing Data Change Events for more details and examples.

模型应该与数据有关,因此最好将设置textField的逻辑移出模型.如果需要,您可以从模型中公开其他方法,以帮助客户端获取有关数据和状态的其他详细信息.

The model should be about data, so it is best if you move the logic of setting textField out of the model. If needed you can expose additional methods from the model to help clients get additional details about data and state.

这篇关于更新数据库后如何使JTable显示刷新的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆