簡體   English   中英

使用來自Access數據庫的JcomboBox項刷新JTable數據

[英]Refreshing JTable data using JcomboBox items coming from Access Database

我如何刷新JTable?

這是我的代碼。

public void itemStateChanged(ItemEvent evt)
    {
        String text=(String)to_Cmb2.getSelectedItem();
        try 
        {
            //  Connect to an Access Database
                Connection con=DriverManager.getConnection("jdbc:odbc:flightdsn");
                Statement s=con.createStatement();
            //  Read data from a table
                ResultSet rs = s.executeQuery("SELECT FlightNo,City,To,Arrives,Departs FROM I_Flights_Routes WHERE To ='"+text+"' ");
                ResultSetMetaData md = rs.getMetaData();
                int columns = md.getColumnCount();

            //  Get column names
            for (int i = 1; i <= columns; i++) 
            {
                columnNames.addElement(md.getColumnName(i));
            }
            //  Get row data
            while (rs.next()) 
            {
                Vector<Object> row = new Vector<>(columns);

                for (int i = 1; i <= columns; i++) 
                {
                    row.addElement(rs.getObject(i));
                }

                data.addElement(row);
            }
            rs.close();
            s.close();
            con.close();
        } 
        catch (Exception e) 
        {
            System.out.println(e);
        }
        //  Create table with database data
        JTable table = new JTable(data, columnNames) 
        {
            public Class getColumnClass(int column) 
            {
                for (int row = 0; row < getRowCount(); row++) 
                {
                    Object o = getValueAt(row, column);

                    if (o != null) 
                    {
                        return o.getClass();
                    }
                }
                return Object.class;
            }
        };
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setBounds(50,10,400,200);
        td.add(scrollPane);
        // td is Jpanel object
        td.setVisible(true);
    }

您正在創建一個全新的JTable-不要這樣做。 使用相同的JTable但

  • 如果要向現有數據添加新數據,請修改JTable的模型
  • 或者如果您想完全替換表中的數據,請創建一個新的DefaultTableModel(或其他TableModel),然后通過setModel(...)設置JTable的模型。

此外, setBounds(...)您將要避免使用null布局和setBounds(...)因為這會創建非常不靈活的GUI,在其他平台或其他分辨率上看起來很糟糕,並且很難升級和管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM