开发者

deleting datas in the table in GUI

I have question that 开发者_如何学Pythonhow can I delete all datas from my jTable in GUI when a user entered a key? thanks


You can set a new empty data model:

TableModel newModel = new DefaultTableModel();
jtable.setModel(newModel);


You need to understand that a JTable is a view of the data, while the actual data resides in the TableModel. If you need to clear out the table, then you need to clear out the TableModel.

If your TableModel is an AbstractTableModel, you must provide implementations of 3 methods:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

Frequently the actual data objects are stored in an additional data structure (e.g. a list), and then the AbstractTableModel queries that list.

List<DomainObject> objects = new ArrayList<DomainObject>();

public int getRowCount() { return objects.size(); }
// How many columns you make depends on what features of the objects you're exposing.
public int getColumnCount() { return NUMBER_OF_COLUMNS; }
public Object getValueAt(int row, int column) {
     DomainObject object = objects.get(row);
     ... // pull out the property based on the column they pass in
}

// By exposing this method, you can allow your Controller code to reach into this model
// and delete all the rows.
public void clear() {
    objects.clear()
}

What HH is suggesting you do is change the model of your JTable to reference an empty model, which will in effect clear out the table. However, the columns etc. will not be persisted correctly (the new DefaultTableModel has no idea what those column names would be).

After you've researched how the view and model fit together more, take a look at GlazedLists. It allows a very powerful way to create TableModels which provide dynamic views of your data, e.g. by filtering out rows that do not match certain criteria.

To sum up - you're not going to find a method on the JTable to clear out its contents, because that's the job of the TableModel. You need some way of ensuring that the TableModel's backing data structures are cleared out.


If you are using the DefaultTableModel then you can just use:

model.setRowCount(0);

This is better than creating a new DefaultTableModel. Creating a new TableModel causes the TableColumnModel to be recreated, which means all the TableColumns will be resize to default values and recreated in the order in which the columns exist in the model. The user may have changed these properties and shouldn't be forced to do it again.

If you are just deleting certain rows that contain a particulsar value, then you can use the DefaultTableModel.removeRow(...) method. Make sure you start by deleting row from the end of the model and count down to 0.


call removeAll of j_table method at addActionListener

button1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent arg0) {
        j_table.removeAll();
        data_model_table.setRowCount(0);
    }
});
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜