2015-03-11 2 views
0

У меня есть ошибка для кода ниже. Извините, если это слишком просто, поскольку я новичок в java.
В принципе, я не могу получить строку «44418» из класса CityChange.
Я знаю, причина в том, что я создал новый экземпляр cc в классе MainPanel.
Однако я не знаю другого способа сделать это.java Передача переменных из одного класса в другой

public class CityChange extends JPanel { 
    public CityChange() { 
    JButton btn1 = new JButton("London") 
    this.add(btn1); 
    btn1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent evt) { 
     //London Yahoo Weather Code 44418 
     setCitySelected("44418"); 
     } 
    }); 
    } 
    public void setCitySelected(String citySelected) { 
    this.citySelected = citySelected; 
    } 
    public String getCitySelected() { 
    return citySelected; 
    } 
    private String citySelected; 
} 

public class MainPanel extends JPanel { 
    public MainPanel() { 
    CityChange cc = new CityChange(); 
    System.out.println(cc.getCitySelected()); //returns null instead of 44418 
    } 
} 

Прошу дать вам несколько советов. Спасибо.

+0

Вы можете указать код для 'setCitySelected()' и 'getCitySelected()' – sircapsalot

+0

Он вернет ожидаемое значение после того, как вы нажмете на свою кнопку. Разве это не так? Только прослушиватель кнопки выбирает ожидаемое значение. – muasif80

+0

Вы нажали кнопку, чтобы спровоцировать действиеПереформированное действие? Как вы знаете, что он возвращает null, так как вы не печатаете или не привязываетесь к возвращенному значению? Что-то здесь отсутствует. – Gladhus

ответ

0

По соображениям времени значение не имеет выбора, кроме как null.

Что происходит здесь «немедленно» (во время инициализации) является то, что создается новый объект CityChange, и его citySelected получил и распечатал. Поскольку никто не задал это иначе, это null.

Только после активации события (нажатие кнопки) оно получает значение, и если вы напечатаете значение, вы увидите новое значение.

+0

Я пытаюсь 'setCitySelected (« 44418 »)' при нажатии кнопки. Затем прохождение и получение этого 'String' или метода' getCitySelected() 'из класса MainPanel', и это проблема, с которой я столкнулся. – user2875021

0

Код setCitySelected("44418"); выполнен только в том случае, когда вы вызываете метод public void actionPerformed(ActionEvent evt), которого в данный момент не происходит. Этот метод вызывается только через кнопку в GUI, поэтому вам сначала нужно хотя бы простое окно с кнопкой. Вот хороший пример http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

+0

Я пытаюсь 'setCitySelected (« 44418 »)' как только кнопка нажата. Затем идет в другой кадр со всеми деталями городской погоды. Таким образом, это означает, что я должен передать 'String' в другой класс. Но если я создаю новый экземпляр класса 'MainPanel', значение String станет нулевым. – user2875021

Смежные вопросы