当查询更改时,Java刷新JTable

希瓦姆·帕(Shivam Paw)

我正在构建一个SQL DB GUI。我遇到的问题是,当用户从SHOW TABLES双击表时,它不会更新显示新表结果的表。

这是我的代码:

JTabbedPane tabbedPane = new JTabbedPane();
Statement stat = Gui.getStat();
private JPanel panel;
private String query;

public static void main(String[] args) {
    showTables();
}


public void showTables() throws SQLException{
        ResultSet showTablesResult = null;
        query = "abc";
        try {
            showTablesResult = stat.executeQuery("SHOW TABLES");
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Error connecting to databse");
        }
        displayResultSet(showTablesResult);
    }


    public void displayResultSet(ResultSet rs) throws SQLException{

        JTable table = new JTable(buildTableModel(rs)){
            private static final long serialVersionUID = 1L;

            @Override
                public boolean isCellEditable(int row, int column) {
                   return false;
                }
        };

        panel.add(new JScrollPane(table));


        table.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e){
                if(e.getClickCount() == 2){
                    if(query == "abc"){
                        //get value in selected cell
                        String selectedData = null;
                        int[] selectedRow = table.getSelectedRows();
                        int[] selectedColumns = table.getSelectedColumns();

                        for (int i = 0; i < selectedRow.length; i++) {
                          for (int j = 0; j < selectedColumns.length; j++) {
                            selectedData = (String) table.getValueAt(selectedRow[i], selectedColumns[j]);
                          }
                        }

                        try {
                            viewTable(selectedData);
                        } catch (SQLException e1) {
                            e1.printStackTrace();
                        }

                    }
                }
            }
        });

    }



    public void viewTable(String tName) throws SQLException{
        ResultSet showTablesResult = null;
        query = "123";
        try {
            showTablesResult = stat.executeQuery("SELECT * FROM " +tName);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Error connecting to databse");
        }
        displayResultSet(showTablesResult);
    }



    public static DefaultTableModel buildTableModel(ResultSet rs)
            throws SQLException {

        ResultSetMetaData metaData = rs.getMetaData();

        Vector<String> columnNames = new Vector<String>();
        int columnCount = metaData.getColumnCount();
        for (int column = 1; column <= columnCount; column++) {
            columnNames.add(metaData.getColumnName(column));
        }

        Vector<Vector<Object>> data = new Vector<Vector<Object>>();
        while (rs.next()) {
            Vector<Object> vector = new Vector<Object>();
            for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
                vector.add(rs.getObject(columnIndex));
            }
            data.add(vector);
        }


        return new DefaultTableModel(data, columnNames);

    }

我该如何解决这个问题使其起作用?我认为可能有一个重绘或刷新表之类的函数,但是我找不到它。

谢谢 :)

卡米克尔
panel.add(new JScrollPane(table));

默认情况下,组件的大小为(0,0),因此无需绘制任何内容。

从可见的GUI添加(或删除)组件时,您需要调用布局管理器,以便在面板上为组件指定大小/位置。基本代码是:

panel.add(...);
panel.revalidate();
panel.repaint();

但是,当使用逻辑“刷新”表时,这样做要容易得多:

table.setModel( your updated TableModel );

无需每次都重新创建JScrollPane和JTable。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

文件更改时页面刷新

来自分类Dev

更改时“刷新” JavaScript文件

来自分类Dev

当Datacontext更改时刷新Datagrid

来自分类Dev

Java GUI JTable“刷新”

来自分类Dev

JTable需要刷新以显示更改

来自分类Dev

绑定对象更改时刷新视图

来自分类Dev

当TextField值更改时,Flutter FutureBuilder刷新

来自分类Dev

绑定对象更改时刷新视图

来自分类Dev

输入更改时需要刷新指令

来自分类Dev

在选择更改时刷新部分视图

来自分类Dev

CountDownTimer 在片段更改时重置或刷新

来自分类Dev

用Java逐步刷新JTable

来自分类Dev

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

来自分类Dev

JTable更改时动态地动态绘制JFreeChart图

来自分类Dev

JTable更改时动态地动态绘制JFreeChart图

来自分类Dev

每当文件更改时,如何使ASP.NET捆绑刷新?

来自分类Dev

在数据库更改时刷新实体

来自分类Dev

我不想在更改时刷新片段

来自分类Dev

代码更改时如何刷新图表,反之亦然?

来自分类Dev

节点:文件更改时自动刷新浏览器

来自分类Dev

数据更改时ng-class不刷新

来自分类Dev

道具在Svelte中更改时如何刷新DOM?

来自分类Dev

在刷新和状态更改时更新页面

来自分类Dev

([ngmodel])对象在方法中更改时不会刷新数据

来自分类Dev

当Datacontext值更改时刷新文本框

来自分类Dev

对相机胶卷中的文件进行更改时,如何刷新UIImagePickerController?

来自分类Dev

子组件更改时刷新应用程序状态

来自分类Dev

如何在TextView更改时刷新Recycler View

来自分类Dev

属性更改时如何刷新由GDI +创建的UserControl