Слушатель и JLabel - Java

Узнай цену своей работы

Формулировка задачи:

Почему не работает обработчик событий на кнопке - не видит объект write. и как выводит ответ на JLabel ?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
class GeometryFrame extends JFrame {
    GeometryFrame() {
        int w=500, h=400;
        setTitle("Геометрия");
        setBounds(400,200,w,h);
        setVisible(true);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        CPanel panel = new CPanel(w,h);
        add(panel);
    }
}
 
class CPanel extends JPanel {
           public CPanel(int W, int H) {
             setLayout(null);
             setBounds(0,0,W,H);
 
            JTextField TF = new JTextField();
            TF.setHorizontalAlignment(JTextField.LEFT);
            TF.setBounds(10,20,100,25);
 
            JTextField TF1 = new JTextField();
            TF1.setHorizontalAlignment(JTextField.LEFT);
            TF1.setBounds(10,60,100,25);
 
            JLabel answer = new JLabel("",1);

            add(TF); add(TF1); add(answer);
 
          //  ActionListener actionListener = new TestActionListener();
 
            JButton btn = new JButton("Сложить");
            btn.setBounds(10,100,100,25);
            btn.addActionListener(TestActionListener);
            add(btn);
         }
}
 
public class TestActionListener implements ActionListener  {
    public void actionPerformed(ActionEvent e) {
        int t, t1, result;
        t = Integer.parseInt(TF.getText());
        t1 = Integer.parseInt(TF1.getText());
        result = t + t1;
        write.setText("Ответ:" + result);
    }
}
class Geometry{
    public static void main(String[] args) {
        new GeometryFrame();
    }
}

Решение задачи: «Слушатель и JLabel»

textual
Листинг программы
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
 
public class GeometryRevoked extends JFrame implements ActionListener{
    private static final long serialVersionUID = 1L;
 
    public static void main(String[] args){
        new GeometryRevoked();
    }
 
    private JTextField t1, t2;
    private JLabel result;
    private JButton button;
 
    GeometryRevoked(){
        initFrame();
        initComponents();
        setVisible(true);
    }
 
    private void initComponents(){
        SpringLayout layout = new SpringLayout();
        JPanel panel = new JPanel(layout);
 
        t1 = new JTextField(20);
        t2 = new JTextField(20);
        button = new JButton("Button");
        result = new JLabel("");
 
        layout.putConstraint(SpringLayout.WEST, t1, 5, SpringLayout.WEST, this);
        layout.putConstraint(SpringLayout.WEST, t2, 5, SpringLayout.WEST, this);
        layout.putConstraint(SpringLayout.NORTH, t2, 25, SpringLayout.NORTH, this);
 
        layout.putConstraint(SpringLayout.WEST, result, 5, SpringLayout.WEST, this);
        layout.putConstraint(SpringLayout.NORTH, result, 50, SpringLayout.NORTH, this);
 
        layout.putConstraint(SpringLayout.WEST, button, 5, SpringLayout.WEST, this);
        layout.putConstraint(SpringLayout.NORTH, button, 75, SpringLayout.NORTH, this);
 
        panel.add(t1);
        panel.add(t2);
        panel.add(result);
        panel.add(button);
 
        button.addActionListener(this);
 
        add(panel);
    }
 
    private void initFrame(){
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);
    }
 
    @Override
    public void actionPerformed(ActionEvent e){
        int value = Integer.parseInt(t1.getText()) + Integer.parseInt(t2.getText());
        result.setText(String.valueOf(value));
    }
}

Оцени полезность:

8   голосов , оценка 3.875 из 5