为了账号安全,请及时绑定邮箱和手机立即绑定

我无法在 Java 中访问另一个类的变量值

我无法在 Java 中访问另一个类的变量值

MMMHUHU 2021-08-25 15:19:13
我有一个 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方法只会打印出账单名称,因此只需将名称值作为参数传递给它。

我还建议检查变量访问和继承,因为这些概念在您的脑海中似乎很混乱。


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信