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

时间:2018-09-01 11:31:37

标签: java swing

我有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 的第一个值,而不是
 选择一个。

1 个答案:

答案 0 :(得分:0)

这里的问题源于对实例变量访问的了解不足。

假设您已将ClassA对象实例化到某个位置并开始操作它。在某个时候,JCombobox的值将被更改。这意味着它的状态仍然驻留在ClassA的实例中。

在打印方法中,创建一个CreateInvoiceTable的新实例,在该实例上调用invoicetable表。虽然您希望这样做可以有效地使您能够访问位于JCombobox对象内的ClassA的值,但事实并非如此。

实例化扩展类后,您将有效地创建它的新实例,这意味着新的JCombobox。这解释了为什么在第二类的上下文中调用getSelectedItem时返回的值不正确。

我假设此行String custname =namecombo.getSelectedItem().toString();有效地返回了正确的值,这将为您提供解决此问题的线索。

现在我最好的建议是停止从classB扩展classA。由于您的invoicetable方法只会打印出一个名字,一个帐单,因此只需在其中输入名称值作为参数即可。

我还建议检查变量访问和继承,因为您似乎对这些概念感到困惑。

希望这会有所帮助。