Передать значение из одного класса в другой - PullRequest
1 голос
/ 12 января 2012

Я пытаюсь получить значение из моего Калькулятора (который находится в своем отдельном классе) в JTextPane в моем другом классе.Меня беспокоит только то, что я не могу этого сделать из-за дизайна моей программы.

В моем основном классе у меня есть внутренний класс, который открывает другой кадр при нажатии JMenuItem.


public class Notepad extends JFrame
{
    ...
    // Opens when the user clicks Calculator 
    // (JMenuItem in the JFrame of the Notepad class)
    private class Calculator implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            Calculate c = new Calculate();
            c.buildGUI();

            // I've tried creating a reference to the Insert class and tried to
            // retrieve the value from the JLabel in the Calculator but continuously
            // receive a NullPointerException
        }
    }
    ...
}

А в другом моем классевнутренний класс для кнопки «Вставка» (который позволяет пользователю вставить свой ответ в JTextPane, если он пожелает).

*** Я пробовал здесь много вещей, таких как создание "getter "и" setter ", которые передают значение в класс Notepad, но обнаружили, что они не работают из-за настройки моей программы.


public class Calculate extends JFrame
{
    ...
    /* Insert
     * Inserts the answer into the 
     * text pane of the Notepad class
     */
    private class Insert implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            String answer = proposal.getText(); // from the JLabel
            if (answer.isEmpty()) JOptionPane.showMessageDialog(frame, "Enter two numbers and hit the desired operator, please");
            // else, insert the answer
            // ***
        }
    }
    ...
}

Еще один из моихпроблема в том, что при нажатии JMenuItem (Калькулятор) в рамке моего Блокнота я получаю NullPointerException, потому что в JLabel (Ответ для калькулятора) нет значения.

Так какя могу получить значение JLabel из Калькулятора и поместить его в JTextPane моей рамки Блокнота, когда нажата кнопка «Вставить»?Также, если моя программа не настроена для выполнения такого действия, есть ли у вас какие-либо предложения по изменению дизайна?

1 Ответ

3 голосов
/ 12 января 2012

Самый простой способ - передать ссылку на блокнот в класс Calculator. Класс Calculator будет выглядеть следующим образом:

  public class Calculator extends JFrame{

         Notepad notepad;

         public Caluclator(Notepad np){
             this();
             notepad = np;
             //any other code you need in your constructor
         }

         ...

         private class Insert implements ActionListener
         {
           public void actionPerformed(ActionEvent e)
           {
              String answer = proposal.getText(); // from the JLabel
                if (answer.isEmpty()) JOptionPane.showMessageDialog(frame, "Enter two numbers and hit the desired operator, please");
                else{
                     notepad.myJTextPane.setText(answer);
                }
            // ***
         }


}

И чтобы вызвать его в классе Блокнот:

   Calculate c = new Calculate(Notepad.this);

Сказав это, было бы неплохо найти некоторые шаблоны проектирования, такие как Observer , предназначенные именно для обновления одного класса при изменении другого.

...