Я не могу получить доступ к значению переменной другого класса в Java - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть класс A и класс B. и класс B расширяется от класса 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);



        }
    }); 

Я выбрал имя из выпадающий список и нажал кнопку (печать), чтобы выполнить класс 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 голосов
/ 01 сентября 2018

Ваша проблема здесь связана с плохим знанием доступа к переменным экземпляра.

Предположим, что вы где-то создали свой объект ClassA и начали его эксплуатировать. В какой-то момент значение JCombobox будет изменено. Это означает, что его состояние все еще находится в экземпляре ClassA.

В вашем методе печати вы создаете новый экземпляр CreateInvoiceTable, для которого вы вызываете таблицу invoicetable. Хотя вы ожидаете, что это даст вам возможность получить доступ к значению JCombobox, которое находится внутри объекта ClassA, это не так.

После создания экземпляра расширяющего класса вы фактически создадите его новый экземпляр, что означает новый JCombobox. Это объясняет, почему при вызове getSelectedItem в контексте второго класса возвращаемое значение является неправильным.

Я полагаю, что эта строка String custname =namecombo.getSelectedItem().toString(); фактически возвращает правильное значение, что поможет вам решить эту проблему.

Теперь мое лучшее предложение - просто прекратить расширение класса A из класса B. Поскольку ваш метод invoicetable будет печатать только имя счета, просто передайте значение имени в качестве параметра в этом.

Я бы также предложил проверить доступность и наследование переменных, так как кажется, что эти понятия запутаны в вашем уме.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...