我有A类和B类。B类是从A类继承的。
在A类中,我有这句话。
JCombobox namecombo;
JButton btnPrint = new JButton("Print");
btnPrint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
CreateInvoiceTable op = new CreateInvoiceTable();
op.invoicetable();
insertingBillNoIntoDatabase();
String custname =namecombo.getSelectedItem().toString();
MessageFormat footer = new MessageFormat(custname);
MessageFormat header = new MessageFormat("SAHA TRADERS");
try {
table.print(JTable.PrintMode.FIT_WIDTH, header,footer);
} catch (PrinterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(model_table.getRowCount()>0) {
model_table.removeRow(0);
}
itemcombo.setSelectedIndex(0);
}
});
我从 combobox 中选择了名称,然后单击按钮(打印)以执行B类。
在B类中。
public void invoicetable() {
String name = Invoice.namecombo.getSelectedItem().toString();
System.out.println(name);
}
public static void main(String[] args) {
CreateInvoiceTable a = new CreateInvoiceTable();
a.invoicetable();
}
}
现在,当我打印它时。它只是打印 comboBox 的第一个值,而不是
选择一个。
答案 0 :(得分:0)
这里的问题源于对实例变量访问的了解不足。
假设您已将ClassA
对象实例化到某个位置并开始操作它。在某个时候,JCombobox
的值将被更改。这意味着它的状态仍然驻留在ClassA
的实例中。
在打印方法中,创建一个CreateInvoiceTable
的新实例,在该实例上调用invoicetable
表。虽然您希望这样做可以有效地使您能够访问位于JCombobox
对象内的ClassA
的值,但事实并非如此。
实例化扩展类后,您将有效地创建它的新实例,这意味着新的JCombobox
。这解释了为什么在第二类的上下文中调用getSelectedItem
时返回的值不正确。
我假设此行String custname =namecombo.getSelectedItem().toString();
有效地返回了正确的值,这将为您提供解决此问题的线索。
现在我最好的建议是停止从classB扩展classA。由于您的invoicetable
方法只会打印出一个名字,一个帐单,因此只需在其中输入名称值作为参数即可。
我还建议检查变量访问和继承,因为您似乎对这些概念感到困惑。
希望这会有所帮助。