当前位置: 首页 > 知识库问答 >
问题:

如何在运行时更新jtable?

臧令
2023-03-14

我不熟悉JTable。

我想在button press事件中在运行时更新jtable数据

这是我的密码。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.*;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class SetEditableTableCell extends JPanel {
JPanel top = new JPanel();
JPanel bottom = new JPanel();
JButton update = new JButton("Update");
JTable table;
Vector<String> rowOne;
Vector<String> rowTwo;
DefaultTableModel tablemodel;
public SetEditableTableCell() {
    this.setLayout(new BorderLayout());
    rowOne = new Vector<String>();
    rowOne.addElement("Row1-1");
    rowOne.addElement("Row1-2");
    rowOne.addElement("Row1-3");
    rowTwo = new Vector<String>();
    rowTwo.addElement("Row2-2");
    rowTwo.addElement("Row2-3");
    rowTwo.addElement("Row2-4");
    Vector<Vector> rowData = new Vector<Vector>();
    rowData.addElement(rowOne);
    rowData.addElement(rowTwo);
    Vector<String> columnNames = new Vector<String>();
    columnNames.addElement("Column One");
    columnNames.addElement("Column Two");
    columnNames.addElement("Column Three");
    tablemodel = new DefaultTableModel(rowData, columnNames);
    table = new JTable(tablemodel);
    //  table.setValueAt("aa", 0, 0);    
    update.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            updatedata();
        }
        private void updatedata() {
            rowOne = new Vector<String>();
            rowOne.addElement("updated Row1-1");
            rowOne.addElement("updated Row1-2");
            rowOne.addElement("updated Row1-3");
            rowTwo = new Vector<String>();
            rowTwo.addElement("updated Row2-2");
            rowTwo.addElement("updated Row2-3");
            rowTwo.addElement("updated Row2-4");
            // tablemodel.addRow(rowTwo);
            tablemodel.fireTableDataChanged();
            table.setModel(tablemodel);
            System.out.println("button pressed");
            // table.setValueAt("aa", 0, 0);    
        }
    });
    JScrollPane scrollPane = new JScrollPane(table);
    top.add(scrollPane);
    bottom.add(update);
    add(top, BorderLayout.NORTH);
    add(bottom, BorderLayout.SOUTH);
}
public static void main(String args[]) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    SetEditableTableCell obj = new SetEditableTableCell();
    frame.add(obj);
    //frame.setSize(400, 300);
    frame.pack();
    frame.setVisible(true);
}
}

但按下“更新”按钮后不会更新。

有人能解决我的问题吗?

提前谢谢。。

共有2个答案

符功
2023-03-14

使用AbstractTableModel构建自己的表模型,并使用它的“事件”触发器通知JTable对基础模型的更改

白宏义
2023-03-14

它不会更新,因为您没有修改表格模型中的值。通过在updateData方法中将新的Vector分配给rowOnerowTwo,您正在改变其他Vector实例,而不是您的TableModel所知道的那些实例。

一种可能的解决方案是重建数据向量并使用setDataVector方法

 类似资料:
  • 我有一个用TypeScript编写的非常简单的应用程序: src/索引。输电系统 然后我的TypeScript配置: tsconfig.json 我可以使用npx tsc构建代码,然后使用节点运行它/构建/索引。js,访问时http://localhost:3000在浏览器中,我看到一条消息“你好,世界”--到目前为止一切都很好 现在使用我可以观察文件,看看它们是否发生变化,并在发生这种情况时重新

  • 问题内容: 大约一年前,我偶然发现了Java的一个不错的功能,我一生都找不到。 通过一些魔术接口,显然可以在运行时声明一些可替换的类或函数。 我找到了一个很好的示例指南,该人运行了一个简单的小程序,该程序打印了一条特定的消息,然后他使用一种我不记得的方法更新了该程序,然后突然该程序将旧的打印功能替换为新的打印功能。 我尝试浏览Java API来激发我的记忆力和谷歌搜索功能,但没有成功。有人可以帮忙

  • 问题内容: 该示例非常简单:我想通过仅显示文本(canvas.drawText())来让用户知道应用程序在做什么。然后,出现我的第一条消息,而不是其他消息。我的意思是,我有一个“ setText”方法,但它不会更新。 该视图的文本绘制仅通过在onDraw();中执行一个drawText来起作用,因此setText更改了文本但不显示它。 有人建议我用SurfaceView替换视图,但是仅进行几次更新

  • 我将Drools与Eclipse和Maven一起用于一个进行许多模式匹配的应用程序。我想使用KieScanner自动更新正在运行的KieSession,而无需重新启动应用程序。但这似乎不起作用。 我使用的是7.24.0。t043用于组织。kie和org。流口水。 我只使用我的本地Maven存储库,所以我已经指定了路径并在我的settings.xml.中设置为true,我还验证了使用最新版本创建一个

  • 我找了很长时间,所以在标记为重复之前,请务必阅读。 我有一个函数(),它是用一个参数调用的。我想将该id作为前缀添加到每个日志消息中。每次调用函数时,它都会更改。因此,我想更新记录器模式,将此id添加为前缀。 我读过: 如何配置 如何重新配置 SO和log4j论坛上的许多帖子都在讨论如何在运行时更改配置。它们要么过时,要么根本不起作用。 以下代码基于 log4j2 文档。它打印: 如果我注释掉行然

  • 我是playframework应用程序开发人员。我使用jpa中的createNativeQuery方法通过select查询从表中提取值。我需要使用更新查询。我要做的是什么,以及该方法的返回类型是什么。请任何人帮助我。提前谢谢。如果我这样使用,它会显示错误。。 Query query=JPA.em()。createNativeQuery(" update truck set flag = ' YES