Пытался написать "калькулятор" и что бы фрэйм и слушатель были в отдельных классах, но что то ничего не происходит при проверке, то есть кнопка b1
на которую прилепил addActionListener(listener)
не работает то есть добавил текстфилд который должен заполниться ответом но этого не происходит.
Сам листенер получен путём создания его экземпляра и проинициализирован в мэйн классе, и через метод сетЛистенер добавлен в фрэйм, и по аналогии так же проинициализированный фрэйм находится в классе листенер, то есть имеют экземпляры друг друга.
Да конечно калькулятор состоит из одной кнопки и ответом должно быть введённое увеличенное число на единицу. И то что написано наверняка по нубски, на это можете не обращать внимания. Главное подскажите где ошибка.
При написании аналогичного с классом фрэйм и вложенным в него листенера все работает норма.
Основной класс:
import javax.swing.*;
public class MainCalc {
public static void main(String[] args){
Listener listener = new Listener();
Frame frame = new Frame("windows self 1/33.3");
frame.setListener(listener);
listener.setFrame(frame);
listener.getFrame().setVisible(true);
listener.getFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
listener.getFrame().setSize(200, 200);
listener.getFrame().setResizable(false);
listener.getFrame().setLocationRelativeTo(null);
}
}
Листенер:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class Listener implements ActionListener{
private Frame fr = null;
public void actionPerformed(ActionEvent e){
try {
if(e.getSource() == fr.b1){
int i = Integer.parseInt(fr.tm.getText());
i++;
String a = ""+i;
fr.lm.setText(a);
}
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "Enter NUMBER");
}
}
public Frame getFrame(){
return fr;
}
public void setFrame(Frame fr) {
this.fr = fr;
}
}
Класс фрэйм:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frame extends JFrame{
JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b0, bm, bp, bdot, beq, bmul, bdiv;
JTextField tm, tme1, tme2;
JLabel lm;
private Listener listener = null;
public void setListener(Listener listener){
this.listener = listener;
}
public Listener getListener(){
return listener;
}
public Frame(String s){
super(s);
setLayout(new FlowLayout());
b1 = new JButton("unit");
tm = new JTextField(10);
lm = new JLabel("text here");
add(b1); add(tm); add(lm);
b1.addActionListener(listener);
}
}
У вас проблема в том, что вы вызываете
b1.addActionListener(listener);
До того как поместите в listener
ваш объект. Поэтому при нажатии на кнопку обработчик не вызывается.
Выносить слушатель в отдельный класс не обязательно. Лучше почитайте про паттерн MVC и попробуйте разобраться в нем. Вот мой пример демонстрирующий реализацию MVC SimpleMVC
Виртуальный выделенный сервер (VDS) становится отличным выбором
ПриветствуюСовсем недавно познакомился с JS и вот недавно потребовалось написать небольшой скрипт для переключения контента
у меня такая проблема c modx кодировке русский текст вообще не работает я установил modx и что то кодировка не работает и в сайте и в админке http://wwwpb-gip
Использую android studioНужно скачать картинку и закинуть ее в imageView