Форум программистов, компьютерный форум, киберфорум
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 14.12.2020
Сообщений: 28
1

Как мне добраться до TextField из отдельного класса

26.12.2020, 17:11. Просмотров 2245. Ответов 0
Метки нет (Все метки)

Здравствуйте, делаю калькулятор на 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() до текстового поля.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2020, 17:11
Ответы с готовыми решениями:

Какие общие правила для написания отдельного класса/файла с условием/заданием и отдельного класса с методом решен?
Например: условие задания: public class Main { public static void main(String args) { ...

Как мне добраться к дискам? Нет прав.
Не могу войти на раздел home и Вин-разделы, у меня нет прав. Что могла случиться? А ведь работало...

Как добраться к методу из другого класса
В первом классе происходит загрузка данных и работа с ними. Весь набор методов, который берет эти...

Как обращаться к массиву из отдельного класса?
Здравствуйте. Подскажите, пожалуйста, как работать с массивом из отдельного класса. И еще вопрос. А...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2020, 17:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как вытащить enum из отдельного класса в строку DataTable
Доброго времени суток. Подскажите, для особо одарённых, как вытащить enum из отдельного класса в...

Как изменять textfield из другого textfield
Здравствуйте, у меня есть два textfield'a, скажем textFieldOne и textFieldTwo. Как сделать, чтобы...

Наследование: Как мне определить любой из методов заданного класса внутри другого класса?
Добрый день, подскажите пожалуйста, что я делаю не так Есть файл Container.h в котором храню...

Как получить данные из TextField и наоборот вывести данные в TextField?
Учусь javafx и scene builder нужно ввести некоторые данные сделать с ними пару действий и вывести...

Создание отдельного класса
Здравствуйте, по заданию мне нужно вынести часть программы в отдельный класс. Столкнулся с...

Callback внутри отдельного класса
Здравствуйте, можно ли как то организовать callbackи внутри отдельного класса? Допустим ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.