【问题标题】:DefaultTableModel doesn't refreshDefaultTableModel 不刷新
【发布时间】:2012-05-11 18:31:19
【问题描述】:

新数据输入数据库后,我的 JTable 不会刷新。我需要终止并再次执行以查看结果。我已经包含了 DefaultTableModel 和 fireTableDataChanged。我还错过了什么?谢谢!

{
    columnNames = new Vector();
    data = new Vector(); 

    try{
        //database stuffs
    }

    catch{
    }  


    DefaultTableModel tm = new DefaultTableModel(); 
    JTable table = new JTable (tm); 
    JScrollPane scrollPane  = new JScrollPane(table);

    table = new JTable(data,columnNames)            
    {               
        public boolean isCellEditable(int row, int column){
            return false;
        }        

            public void newDataAvailable (TableModelEvent e){
            }
    };      

    scrollPane = new JScrollPane(table);            
    scrollPane.setBounds(33, 47, 256, 228);      
    panel.add(scrollPane);          

}

我可以创建一个“刷新按钮”并改为刷新值吗?

【问题讨论】:

    标签: java swing jtable refresh defaulttablemodel


    【解决方案1】:
    1. 我创建了一个新项目,其中我选择了一个新框架并将一个表格、一个标签、一个文本字段和一个按钮从摇摆控件拖动到您的框架。

    2.在后端创建一个表...

    1. 从此链接下载 rs2xml jar 文件

    Download rs2xml.jar

    1. 将其添加到项目库中……

    右键项目>属性>库>添加jar/文件夹>选择jar>ok

    5.然后使用以下代码连接mysql

    public class DBConnect {
    
    Connection connection = null;
    
    public Connection getConnection() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
            System.out.println("connection successfully");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return connection;
    }
    }
    
    1. 使用以下代码调用页面中的函数

      con=new DBConnect();
      statement=con.getConnection().createStatement();
      

    7.然后创建一个更新函数,输入以下代码……

    void update_table() throws SQLException{
        rs=statement.executeQuery("select * from details");
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
    }
    

    8.在按钮动作事件中输入以下内容并调用更新函数

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
       try {
           Object name=jTextField1.getText();
           String sql="insert into details (name) values('"+name+"')";
            int  resultset=statement.executeUpdate(sql);
            update_table();
       } catch (SQLException ex) {
           Logger.getLogger(update.class.getName()).log(Level.SEVERE, null, ex);
       }
    

    }

    9.然后运行项目……

    您也可以按照本教程进行操作:--

    How to refresh JTable after insert delete or update the data in java Netbeans ID

    【讨论】:

      【解决方案2】:

      您创建新的JTable 实例。只需创建一次并将新模型设置为现有的JTable(正确添加到容器中)。

      【讨论】:

      • 谢谢。我修改了我的代码,但它似乎仍然无法正常工作。我应该调用特定的方法来刷新值吗?我是否必须 validate() 或 repaint() 我的 JTable?
      【解决方案3】:

      您不必显式调用fireTableDataChanged()DefaultTableModel 会在您更新模型时自动执行此操作,如相关的 example 所示。

      【讨论】:

      • 谢谢。我已经删除了 fireTableDataChanged(),它仍然无法正常工作。我应该添加 newDataAvailable() 吗?使用PreparedStatement直接往数据库中添加数据,会不会影响自动更新?
      • 在数据库中插入新数据并提交结果后,您需要再次运行原始查询以获取新行。
      猜你喜欢
      • 2018-10-01
      • 2012-09-21
      • 2015-06-03
      • 1970-01-01
      • 2023-02-23
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多