java JTable 添加/删除行到自定义表模型(更新表显示)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3494276/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JTable add/remove rows to custom table model (updating table display)
提问by cfans
Does anyone have a good example of how to Add/Remove rows from a JTable using a custom table model? The issue I seem to be having is how to have the table keep updating when I add or remove items.
有没有人有一个很好的例子来说明如何使用自定义表模型从 JTable 添加/删除行?我似乎遇到的问题是如何在添加或删除项目时让表格保持更新。
The real simple idea here is to have an add and remove button above my table which allows the user on the fly to change the table.
这里真正简单的想法是在我的表格上方有一个添加和删除按钮,允许用户动态更改表格。
回答by YoK
Here is example for adding row:
这是添加行的示例:
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
public class RowAdder extends JFrame {
final SimpleModel tableData = new SimpleModel();
JTable table = new JTable(tableData);
public static void main(String[] args) {
RowAdder ra = new RowAdder();
ra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ra.setSize(400, 300);
ra.setVisible(true);
}
public RowAdder() {
final JTextField textField = new JTextField();
setLayout(new BorderLayout());
add(new JScrollPane(table), BorderLayout.CENTER);
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
tableData.addText(textField.getText());
textField.setText("");
}
});
add(textField, BorderLayout.SOUTH);
}
}
class SimpleModel extends AbstractTableModel {
Vector textData = new Vector();
public void addText(String text) {
textData.addElement(text);
fireTableDataChanged();
}
public int getRowCount() {
return textData.size();
}
public int getColumnCount() {
return 3;
}
public Object getValueAt(int row, int column) {
return textData.elementAt(row);
}
}
above ref from : http://www.java2s.com/Tutorial/Java/0240__Swing/AddrowstoaTable.htm
以上参考来自:http: //www.java2s.com/Tutorial/Java/0240__Swing/AddrowstoaTable.htm
Checkout this tutorial about JTable:
查看有关 JTable 的本教程:
http://download.oracle.com/javase/tutorial/uiswing/components/table.html
http://download.oracle.com/javase/tutorial/uiswing/components/table.html
Specifically for table model check:
具体用于表模型检查:
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#data
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#data
I think this tutorial should answer all your question.
我认为本教程应该可以回答您的所有问题。
回答by Andreas Dolk
You have to notify the JTable object on changes of the underlying table model. The table is not observing the model but waiting for events.
您必须将底层表模型的更改通知 JTable 对象。该表不是在观察模型而是在等待事件。
After every change (or set of changes), create a TableModelEvent and call the tables tableChangedmethod.
在每次更改(或一组更改)之后,创建一个 TableModelEvent 并调用表tableChanged方法。

