我有这两种形式。一个包含几个按钮。另一个包含两个表。单击一个按钮,数据将保存在数据库中,然后以另一种形式传输到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)? 注意:我不想在表单中添加任何按钮,我只想显示数据。
任何帮助都将不胜感激。
答案 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
:您可以在此处向您的数据库和之前的数据库添加新记录
表第一种方式是你正在尝试的方式。为了使它以这种方式工作,你需要做这样的事情:
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;
}
}
第二种方法是将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;
}
}