Здравствуйте, делаю калькулятор на swing. Добавляю обработчик события при нажатии на все кнопки с цифрами:
Java |
1
2
3
| for(Component c : panel.getComponents()) {
((JButton)c).addActionListener(new btnActionListener());
} |
|
В отдельном файле btnActionListener.java создала класс btnActionListener. Там получаю текст на кнопке с помощью:
Java |
1
| JButton myButton = (JButton)e.getSource(); |
|
А также вывожу цифру на консоль:
Java |
1
| System.out.println(myButton.getText()); |
|
Хочу, чтобы в текстовое поле, которое размещается на форме, добавлялась цифра. Когда я делала в этом же конструкторе
Java |
1
| ((JButton)c).addActionListener(new ActionListener ... |
|
с переопределением метода ActionPerformed (кажется, это называется анонимный класс), то могла добраться до текстового поля и добавить в него цифру. А теперь, когда обработчик у меня в отдельном файле, не могу до него добраться. Вот мой код:
Файл Main.java:
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
| package com.company;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.beans.EventHandler;
import java.net.URL;
import java.util.Scanner;
public class Main {
JTextField txtField;
public Main(){
JFrame frame = new JFrame();
frame.setSize(800,800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.getContentPane().setBackground(Color.BLUE);
frame.setLayout(new FlowLayout());
frame.setVisible(true);
JPanel outerPanel = new JPanel();
outerPanel.setLayout(new GridLayout(2,1));
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
JPanel panelOperations = new JPanel();
panel.setLayout(new GridLayout(4,3));
panel2.setLayout(new GridLayout(2,1));
panelOperations.setLayout(new GridLayout(1,5));
JButton btnPlus = new JButton("+");
JButton btnMinus = new JButton("-");
JButton btnMultiple = new JButton("*");
JButton btnDivide = new JButton("/");
JButton btnEquals = new JButton("=");
panelOperations.add(btnPlus);
panelOperations.add(btnMinus);
panelOperations.add(btnMultiple);
panelOperations.add(btnDivide);
panelOperations.add(btnEquals);
for(Component c : panelOperations.getComponents()) {
((JButton)c).setFont(new Font("Times New Roman",Font.BOLD,25));
((JButton)c).setBackground(Color.ORANGE);
}
txtField = new JTextField();
txtField.setHorizontalAlignment(SwingConstants.RIGHT);
txtField.setText("0");
panel2.add(panelOperations);
panel2.add(txtField);
frame.add(outerPanel);
outerPanel.add(panel);
outerPanel.add(panel2);
panel.setBackground(Color.YELLOW);
panel2.setBackground(Color.GREEN);
JButton btn1 = new JButton("1");
JButton btn2 = new JButton("2");
JButton btn3 = new JButton("3");
JButton btn4 = new JButton("4");
JButton btn5 = new JButton("5");
JButton btn6 = new JButton("6");
JButton btn7 = new JButton("7");
JButton btn8 = new JButton("8");
JButton btn9 = new JButton("9");
JButton btn0 = new JButton("0");
panel.add(btn1);
panel.add(btn2);
panel.add(btn3);
panel.add(btn4);
panel.add(btn5);
panel.add(btn6);
panel.add(btn7);
panel.add(btn8);
panel.add(btn9);
panel.add(btn0);
for(Component c : panel.getComponents()) {
((JButton)c).addActionListener(new btnActionListener());
}
}
public static void main(String[] args) {
Main m = new Main();
}
} |
|
Файл btnActionListener.java:
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
| package com.company;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class btnActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton myButton = (JButton)e.getSource();
System.out.println(myButton.getText());
}
} |
|
Думаю, можно как-то через родителей e добраться, но хотелось бы узнать, есть ли другие способы попроще.
Добавлено через 9 минут
Прошу прощения, запуталась с определениями. Не через анонимный класс делала обработчик, ну короче неважно.
Думала, что можно добраться через родительские компоненты (JButton)e.getSource() до текстового поля.