Java 如何使用单个删除按钮从不同的JTable中删除行

Java 如何使用单个删除按钮从不同的JTable中删除行,java,swing,jtable,Java,Swing,Jtable,我的应用程序中有一个选项卡式布局 请看这张图片 如上图所示,我在第一个选项卡(沙龙库存选项卡)的两个不同选项卡中有两个表 我想删除所选行 所做的是:removebutton的actionPerformed方法 int row_num =jTable4.getSelectedRow(); try{dtm_stock.removeRow(row_num);} catch(ArrayIndexOutOfBoundsException e){ JOpt

我的应用程序中有一个选项卡式布局 请看这张图片

如上图所示,我在第一个选项卡(沙龙库存选项卡)的两个不同选项卡中有两个表 我想删除所选行 所做的是:removebutton的actionPerformed方法

        int row_num =jTable4.getSelectedRow();
    try{dtm_stock.removeRow(row_num);} 
    catch(ArrayIndexOutOfBoundsException e){
        JOptionPane.showMessageDialog(this,"Please select a Product");
    }
这适用于当前选项卡(沙龙选项卡) 但是如何为其他选项卡(待售库存)实现相同的功能

进一步详情:

我在2-diff选项卡中有2-table,两者都有2-diff table模型(默认) 初始化时,数据设置为null 然后从数据库中检索数据并将其设置为相应的TableModel。 现在有一个删除按钮,它将从表中删除所选行

我想从表中删除所选行,而不考虑任何选项卡

代码:初始化

                jTable4 = new javax.swing.JTable();
                dtm_stock = new DefaultTableModel(new Object [][] {
        {null,null, null, null},
        {null,null, null, null}
    },
    new String [] {
        "ID","NAME", "PRICE", "QUANTITY"
    });
    jTable4.setModel(dtm_stock
    );
添加数据:

//-----ADD STOCK TO THE STOCK TABLE --------------//

    try {

    ResultSet r7 = con.createStatement().executeQuery("select * from stock");
        while(r7.next()){
            dtm_stock.insertRow(dtm_stock.getRowCount(),new Object[]{r7.getString("id"),r7.getString("p_name"),r7.getString("price"),r7.getString("qty")});
        }
    } catch (SQLException e) {

        JOptionPane.showMessageDialog(this,e.toString());
    }
如果我将同一个TableModel添加到另一个表中,则数据将进入该表,当前为空:

这似乎成功了:`

int selectedIndex = jTabbedPane2.getSelectedIndex();

    if(selectedIndex == 0 ){
        int row_num =stock_table.getSelectedRow();
    try{
        dtm_stock.removeRow(row_num);

    }
    catch(ArrayIndexOutOfBoundsException/*|SQLException*/ e){
        JOptionPane.showMessageDialog(this,"Please select a Product");
    }
    }//if

    if(selectedIndex == 1){
        int row_num =sale_Stock_table.getSelectedRow();
    try{
        dtm_sale_stock.removeRow(row_num);

    }
    catch(ArrayIndexOutOfBoundsException/*|SQLException*/ e){
        JOptionPane.showMessageDialog(this,"Please select a Product");
    }
    }
从这里开始:

如果他们共享同一个模型,他们怎么会有不同的数据,请解释

您可以控制在视图中显示哪些列(JTable)


查看JTable的
removeColumn(…)
方法。它将从视图中删除一列。但是,数据仍然在TableModel中。

如果我理解正确,您可以放置一些标志来保存当前可见选项卡的值,并使用If station从正确的模型中删除行。另一方面,更好的解决方案是创建某种控制器。控制器将存储活动选项卡,并具有removeRow方法。切换制表符将触发事件,以便控制器知道从哪个制表符删除行。

若要更快获得更好的帮助,请发布一个。这两个表应共享一个共同的表模型;如果不是,这两个表模型应该共享一个公共数据源。@垃圾神-如果它们共享同一个模型,那么它们怎么会有不同的数据,请解释。如果这两个表共享一个公共表模型,请使用@camickr's。如果两个表模型不同,它们应该共享一个共同的数据源。您的想法也是正确的,但问题是,在表模型中设置数据的查询对于每个表都是不同的,所以对我来说有点复杂。