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

我有一个 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();

}

}

现在当我打印它时。它只打印组合框的第一个值而不是

选定的值。


MMMHUHU
浏览 321回答 1
1回答

幕布斯6054654

您在这里的问题源于对实例变量访问的了解不足。假设您已经在ClassA某处实例化了您的对象并开始操作它。在某些时候, 的值JCombobox将被更改。这意味着它的状态仍然驻留在 的实例中ClassA。在您的打印方法中,您创建了一个新实例,您可以CreateInvoiceTable在其上调用invoicetable表。虽然您期望这将有效地赋予您访问JCombobox驻留在ClassA对象中的值的能力,但事实并非如此。在实例化扩展类时,您将有效地创建它的一个新实例,这意味着一个新的JCombobox. 这解释了为什么在getSelectedItem第二个类的上下文中调用时返回的值不正确。我假设这一行String custname =namecombo.getSelectedItem().toString();有效地返回了正确的值,这将为您解决这个问题提供线索。现在我最好的建议是简单地停止从 classB 扩展 classA。由于您的invoicetable方法只会打印出账单名称,因此只需将名称值作为参数传递给它。我还建议检查变量访问和继承,因为这些概念在您的脑海中似乎很混乱。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java