gpt4 book ai didi

java - 如何更新 JTable 中 DefaultTableModel 的行?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:23 26 4
gpt4 key购买 nike

好的,我已将此表添加到添加到 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();
}
});

最佳答案

这里有几个问题:

  1. 看起来您需要在按下该按钮时更新整个表格。您在这里有三个选项:使用 setDataVector 更新 DefaultTableModel , 从头开始​​重新创建一个新模型并使用 setModel 将其设置在 JTable 上, 实现你自己的 TableModel基于 AbstractTableModel并触发适当的 TableModel 事件。您还可以使用 addRow 更新模型和 removeRow ,但这将非常无效,因为它会触发许多事件。

  2. 要监听“按钮按下”事件,而不是用户 ActionListener (并使用 addActionListener 添加它)或一个操作(并使用 setAction 设置它)。

  3. 在DefaultTableModel中,修改结构时,不需要手动调用fireTableDataChanged(); .每当您修改基础数据时,它都会自动触发适当的 TableModel 事件。不要打电话 frame.repaint()要么,它是无用的,而且可能很耗时。

  4. 不相关:考虑关注 Java coding conventions (类名以大写字母开头)和有意义的变量名。

关于java - 如何更新 JTable 中 DefaultTableModel 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11148339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com