从netbeans中的另一个表单向JTable添加数据

时间:2013-11-25 15:31:59

标签: java mysql forms swing netbeans

我有这两种形式。一个包含几个按钮。另一个包含两个表。单击一个按钮,数据将保存在数据库中,然后以另一种形式传输到JTable。我只通过第一种形式编写了代码。但它不起作用。 这是代码:

int dress1=100;
DefaultTableModel CurrPurchases=(DefaultTableModel) CurrentPurchases.getModel();
double price1=Double.parseDouble(Price1.getText());
int rows=CurrPurchases.getRowCount();
if(rows > 0){
    for (int i = 0; i < rows; i++) {
         CurrPurchases.removeRow(0);
    }
}
try{
    Connection connection=getConnection();
    ResultSet curprs=null;
    Statement buy1stmt=connection.createStatement();
    String Buy1Query1="Update Products set Quantity=Quantity-1 where Product_no=1;";
    String Buy1Query2="Insert into Buy values('"+Pname1.getText()+"',"+price1+");";
    buy1stmt.executeUpdate(Buy1Query1);
    buy1stmt.executeUpdate(Buy1Query2);
    dress1--;
    if(dress1==0){
        JOptionPane.showMessageDialog(null,"Sorry, This Item is Out of Stock!");
    }
    new ShoppingCart().setVisible(true);
    PreparedStatement buy2stmt=connection.prepareStatement("Select * from Buy;");
    curprs=buy2stmt.executeQuery();
    if(curprs.last()){
        CurrPurchases.addRow(new Object[]{curprs.getString(1),curprs.getDouble(2)});
    }
}
catch(Exception ex){
    ex.printStackTrace();
}
finally{}

但是这一行具体显示错误(我的意思是用红线加下划线):

DefaultTableModel CurrPurchases=(DefaultTableModel) CurrentPurchases.getModel();

如何以其他形式将数据添加到该表(CurrentPurchases)? 注意:我不想在表单中添加任何按钮,我只想显示数据。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

来自评论部分:

  

CurrentPurchases.getModel()用红色加下划线。其实   CurrentPurchases是另一种形式的jtable的名称。所以   我现在该怎么办?

我现在明白你的问题。您正试图直接从另一个表单访问表单中定义的变量。这就是编译器抱怨的原因。您需要为此CurrentPurchases创建一个公共getter,以便从其他类访问它。像这样:

public JTable getCurrentPurchasesTable() {
    return this.CurrentPurchases;
}

然后进行此更改:

DefaultTableModel CurrPurchases= (DefaultTableModel) otherFormVariable.getCurrentPurchasesTable().getModel();

当然,您需要引用另一个表单(我在示例中将其称为otherFormVariable),以便根据需要获取表格。


一个偏离主题的提示:


编辑:实施例

你是Java的新手(欢迎来到这个世界:P)我会给你两个可能的实现例子。

首先,让我们假设您有以下两种形式:

  • Form1:这是放在你的桌子上。
  • Form2:您可以在此处向您的数据库和之前的数据库添加新记录 表

示例1:授予对Form1表的公共访问权限

第一种方式是你正在尝试的方式。为了使它以这种方式工作,你需要做这样的事情:

public class Form1 extends JDialog {

    JTable currentPurchases;
    JButton addRecordButton;

    private initComponents() {
        addRecordButton = new JButton("Add record");
        addRecord.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                Form2 form2 = new Form2();
                form2.setForm1(this);
                form2.setVisible(true);
            }
        };
        ... // init the table and other components
    }

    public JTable getCurrentPurchasesTable() {
        return this.currentPurchases;
    }
}

public class Form2 extends JDialog {

    Form1 form1; // this variable will keep reference to a Form1 instance
    JButton saveRecordButton;

    private void initComponents() {
        saveRecordButton = new JButton("Save record");
        saveRecordButton .addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                DefaultTableModel model = (DefaultTableModel) form1.getCurrentPurchasesTable().getModel();
                // add new rocord to the model
            }
        };
        ... // init the other components

    }

    public void setForm1(Form1 f) {
        this.form1 = f;
    }

}

示例2:将TableModel设置为Form2

第二种方法是将TableModel设置为Form2对象。这样您就不再需要公开访问您的表了。它应该是这样的:

public class Form1 extends JDialog {

    JTable currentPurchases;
    JButton addRecordButton;

    private initComponents() {
        addRecordButton = new JButton("Add record");
        addRecord.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                Form2 form2 = new Form2();
                form2.setTableModel(currentPurchases.getModel());
                form2.setVisible(true);
            }
        };
        ... // init the table and other components
    }
}

public class Form2 extends JDialog {

    TableModel model; // this variable will keep reference to a TableModel instance
    JButton saveRecordButton;

    private void initComponents() {
        saveRecordButton = new JButton("Save record");
        saveRecordButton .addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                // add new rocord to the model:
                ((DefaultTableModel)model).addRow(...);                    
            }
        };
        ... // init the other components

    }

    public void setTableModel(TableModel m) {
        this.model = m;
    }

}