我有一个 A 类和 B 类。 B 类从 A 类扩展而来。在课堂上AI有这样的说法。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); } }); 我从组合框中选择了名称并点击了一个按钮(打印)来执行 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();}}现在当我打印它时。它只打印组合框的第一个值而不是选定的值。
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
您在这里的问题源于对实例变量访问的了解不足。
假设您已经在ClassA
某处实例化了您的对象并开始操作它。在某些时候, 的值JCombobox
将被更改。这意味着它的状态仍然驻留在 的实例中ClassA
。
在您的打印方法中,您创建了一个新实例,您可以CreateInvoiceTable
在其上调用invoicetable
表。虽然您期望这将有效地赋予您访问JCombobox
驻留在ClassA
对象中的值的能力,但事实并非如此。
在实例化扩展类时,您将有效地创建它的一个新实例,这意味着一个新的JCombobox
. 这解释了为什么在getSelectedItem
第二个类的上下文中调用时返回的值不正确。
我假设这一行String custname =namecombo.getSelectedItem().toString();
有效地返回了正确的值,这将为您解决这个问题提供线索。
现在我最好的建议是简单地停止从 classB 扩展 classA。由于您的invoicetable
方法只会打印出账单名称,因此只需将名称值作为参数传递给它。
我还建议检查变量访问和继承,因为这些概念在您的脑海中似乎很混乱。
添加回答
举报
0/150
提交
取消