JTable需要刷新以显示更改

几百个

JTable需要刷新,例如删除一行。

我的代码:

@Override
public void actionPerformed(ActionEvent e) {
 if (e.getSource() == dellButton) {
      int selectedRow = table.getSelectedRow();
        if (selectedRow >= 0) {
            try {
                int rowID = (int) table.getValueAt(table.getSelectedRow(), 0);
                int modelRowIndex = table.convertRowIndexToModel(selectedRow);
                rstm.removeRecord(rowID ,rowIndex);
            } catch (SQLException sqle) {
                sqle.printStackTrace();
            }
        } else {
            System.out.println("Select a row");
        }
    }
}
 ....

我的表模型类:

public class ResultSetTableModel extends AbstractTableModel {

private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData metaData;
private int numberOfRows;
private boolean connectedToDatabase = false;

public ResultSetTableModel(String driver, String url,
        String username, String password, String query)
        throws SQLException, ClassNotFoundException {

    Class.forName(driver);
    connection = DriverManager.getConnection(url, username, password);
    statement = connection.createStatement(
            ResultSet.TYPE_SCROLL_INSENSITIVE,
            ResultSet.CONCUR_READ_ONLY);

    connectedToDatabase = true;
    updateFromDatabase(query);
}

@Override
public Class getColumnClass(int column) throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }

    try {
        String className = metaData.getColumnClassName(column + 1);

        return Class.forName(className);
    } catch (Exception exception) {
        exception.printStackTrace();
    }

    return Object.class;
}

@Override
public int getColumnCount() throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    try {
        return metaData.getColumnCount();

    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    }
    return 0;
}

@Override
public String getColumnName(int column) throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    try {
        return metaData.getColumnName(column + 1);
    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    }
    return "";
}

@Override
public int getRowCount() throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    return numberOfRows;
}

@Override
public Object getValueAt(int row, int column)
        throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }

    try {
        resultSet.absolute(row + 1);
        return resultSet.getObject(column + 1);
    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    }

    return "";
}

public void updateFromDatabase(String query)
        throws SQLException, IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    resultSet = statement.executeQuery(query);
    metaData = resultSet.getMetaData();

    resultSet.last();                   // move to last row
    numberOfRows = resultSet.getRow();  // get row number      

    fireTableStructureChanged();
}

public void disconnectFromDatabase() {
    if (!connectedToDatabase) {
        return;
    }
    try {
        statement.close();
        connection.close();
    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    } finally {
        connectedToDatabase = false;
    }
}

public void removeRecord(int userID , int userRow) throws SQLException {
    String deleteQuery = "delete from mytable where id=?";
    PreparedStatement pStatement = connection.prepareStatement(deleteQuery);
    pStatement.setInt(1, userID);
    int rowsAffected = pStatement.executeUpdate();
    System.out.println("Affected rows are: " + rowsAffected);

    fireTableRowsDeleted(userRow,userRow);
}
}

fireTableRowsDeleted()在表模型中使用,但不起作用!

穆塔塔巴鲁哈尼

我了解了您的问题,您认为从SQL中删除行与JTable有联系,但实际上并非如此,从SQL中删除行后,您必须再次设置Jtable的模型,或者如果您不想设置该模型再次通过其方法.removeRow()更改TableModel,这将从该模型中删除该行,并且您的表将自动显示更改。

public class d10 extends JFrame {

DefaultTableModel tableModel = new DefaultTableModel();
Vector<Vector<Object>> doubleVector = new Vector<>();
Vector<Object> singleVector = new Vector<>();
Vector<Object> ColumnNames = new Vector<>();
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
static String dbUrl = "jdbc:mysql://localhost/mydb";
public JTable table;

public static Connection connectToDb() throws ClassNotFoundException, SQLException {
    return DriverManager.getConnection(dbUrl, "root", "2323");
}

public d10() {
    try {
        con = connectToDb();
        ps = con.prepareStatement("select * from mytable");
        rs = ps.executeQuery();

        doubleVector = new Vector<>();
        while (rs.next()) {
            singleVector = new Vector<>();
            singleVector.add(rs.getInt(1));
            singleVector.add(rs.getString(2));
            doubleVector.add(singleVector);
        }
        ColumnNames = new Vector<>();
        ColumnNames.add("ID1");
        ColumnNames.add("Name1");

        tableModel = new DefaultTableModel(doubleVector, ColumnNames);
        table = new JTable(tableModel);

        add(new JScrollPane(table), BorderLayout.CENTER);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 500);
        setLocation(400, 120);
        setVisible(true);

    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    } catch (SQLException sqle) {
        sqle.printStackTrace();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JTable:正确显示刷新表

来自分类Dev

关于更改的javascript需要刷新

来自分类Dev

当查询更改时,Java刷新JTable

来自分类Dev

插入后无法刷新显示的JTable

来自分类Dev

插入后无法刷新显示的JTable

来自分类Dev

刷新Java Jtable以显示更新的数据

来自分类Dev

输入更改时需要刷新指令

来自分类Dev

使用JRadioButtons更改JTable中的列不会刷新结构

来自分类Dev

使用JRadioButtons更改JTable中的列不会刷新结构

来自分类Dev

刷新jtable而不显示结果超过一次

来自分类Dev

如何刷新WinRTXamlToolkit图表以显示更改的数据

来自分类Dev

端子宽度更改后,tmux刷新显示

来自分类Dev

如何刷新QGraphicsView以显示QGraphicsScene的背景更改

来自分类Dev

刷新按钮不刷新jtable

来自分类Dev

刷新JTable删除标题

来自分类Dev

JTable将不会刷新

来自分类Dev

我的Jtable不刷新

来自分类Dev

刷新Jtable中的按钮

来自分类Dev

刷新包含JPanel的JTable

来自分类Dev

Java GUI JTable“刷新”

来自分类Dev

Java-方法更改JTable中变量的值(刷新不起作用)

来自分类Dev

更改搜索值时刷新/更新JTable中的荧光笔

来自分类Dev

如何在不更改setAutoCreateRowSorter的顺序的情况下刷新表(JTable)?

来自分类Dev

浏览器刷新后未显示angularjs代码更改

来自分类Dev

融合-更改文件之一后如何刷新显示

来自分类Dev

如何更改显示器的刷新率?

来自分类Dev

如何刷新已更改的图标,以便显示新图标?

来自分类Dev

Windows可以更改显示器的刷新率吗?

来自分类Dev

ViewPager不显示页面内容/更改视图后不刷新