Новичок в SWING просит помощи
Есть два WindowsPanel. В разных классах, кнопки отдельно, поля для ввода отдельно.
public class WindowFrame extends JFrame {
WindowFrame(){
WindowPanel windowPanel = new WindowPanel();
WindowPanel2 windowPanel2 = new WindowPanel2();
this.setPreferredSize(new Dimension (400,600));
this.add(windowPanel);
this.add(windowPanel2);
this.setFocusable(true);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setTitle("Calculator");
}
}
public class WindowPanel extends JPanel {
TextField textField1;
TextField textField2;
TextField textField3;
WindowPanel(){
this.setLayout(null);
Label label1 = new Label();
this.add(label1);
label1.setText("First digit");
label1.setBounds(50, 50, 200, 20);
TextField textField1 = new TextField();
textField1.setBounds(50, 70, 200, 30);
this.add(textField1);
}
public class WindowPanel2 extends JPanel {
WindowPanel2(){
this.setLayout(new GridLayout(2, 2));
ButtonListener1 bl1 = new ButtonListener1(this);
Button button1 = new Button("+");
this.add(button1);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
float first = Float.parseFloat(WindowPanel.textField1.getText());
float second = Float.parseFloat(WindowPanel.textField2.getText());
float result = first + second;
WindowPanel.textField1.setText("");
WindowPanel.textField2.setText("");
WindowPanel.textField3.setText(Float.toString(result));
}
});
}
При запуске выдает ошибку NPE, то есть не получает значение поля "textField".
В чем я не прав?
Честно говоря, я не понимаю, как этот код вообще скомпилировался, так как Вы пытаетесь обратиться к нестатическим полям класса WindowPanel
через имя класса:
float first = Float.parseFloat(WindowPanel.textField1.getText());
Ошибка как минимум в том, что при обращении к элементам интерфейса Вы пытаетесь обратиться к полям класса WindowPanel
, а не к полям созданного Вами объекта windowPanel
класса WindowPanel
.
UPD. И как подсказывают подсказывали в комментарии, в конструкторе WindowPanel()
Вы не инициализируете поля класса: локальная переменная конструктора TextField textField1
скрывает одноименное поле класса, а остальные два поля Вы вообще не инициализируете.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Например, Map<String*, Integer> map = new TreeMap<String, Integer>();, там где * можно поставить < <String,String>, Integer > например?