- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
好的,我已将此表添加到添加到 JFrame 的 JPanel。
在 mousePressed 事件中,它安装了一个新类 tData 并调用了一个方法,该方法以 vector 元素中包含的字符串形式从数据库返回数据。
我想要发生的事情,每次按下 btn 时它都会更新表格,
会发生什么,每次按下 btn 时它都会更新表格但将相同的数据添加到表格的末尾?
什么会导致这种情况发生?
Object columnHeaders[] = {"Fname", "Mname", "Lname", "Age"};
Object data[][] = {{}};
final DefaultTableModel dtm = new DefaultTableModel(data, columnHeaders);
JTable tb = new JTable(dtm);
JScrollPane scrollPane = new JScrollPane(tb);
tableWrap.add(scrollPane);
btn.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent arg0) {
tData h = new tData(10));
Vector<String> v = h.getInfo();
for(int i = 0; i < v.size() ; i++) {
dtm.insertRow(i, new Object[]{v.get(i).split(",")[0], v.get(i).split(",")[1], v.get(i).split(",")[2], v.get(i).split(",")[3]});
}
dtm.fireTableDataChanged();
frame.repaint();
}
});
最佳答案
这里有几个问题:
看起来您需要在按下该按钮时更新整个表格。您在这里有三个选项:使用 setDataVector
更新 DefaultTableModel , 从头开始重新创建一个新模型并使用 setModel
将其设置在 JTable 上, 实现你自己的 TableModel
基于 AbstractTableModel
并触发适当的 TableModel 事件。您还可以使用 addRow
更新模型和 removeRow
,但这将非常无效,因为它会触发许多事件。
要监听“按钮按下”事件,而不是用户 ActionListener
(并使用 addActionListener
添加它)或一个操作(并使用 setAction
设置它)。
在DefaultTableModel中,修改结构时,不需要手动调用fireTableDataChanged();
.每当您修改基础数据时,它都会自动触发适当的 TableModel 事件。不要打电话 frame.repaint()
要么,它是无用的,而且可能很耗时。
不相关:考虑关注 Java coding conventions (类名以大写字母开头)和有意义的变量名。
关于java - 如何更新 JTable 中 DefaultTableModel 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11148339/
我是一名优秀的程序员,十分优秀!