Конструктор. Джава почему-то не видит переменную word
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Words {
Words() {
JFrame jfrm = new JFrame("Слова"); // Создаем контейнер верхнего уровня
jfrm.setLayout(new FlowLayout()); // Устанавливаем диспетчек компоновки
jfrm.setSize(400, 200); // Задаем размер окна
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfrm.setLocationRelativeTo(null); // Размещаем окно в центре экрана
jfrm.setVisible(true); // Делаем его видимы
JTextField jtf1 = new JTextField(15);
jtf1.setHorizontalAlignment(JTextField.CENTER);
jfrm.add(jtf1); // Добавляем в контейнер
JTextField jtf2 = new JTextField(15);
jtf2.setHorizontalAlignment(JTextField.CENTER);
jfrm.add(jtf2);
JButton button1 = new JButton("Выбрать");
jfrm.add(button1);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String word = (jtf1.getText());//вот тут я создаю word
System.out.println(word);
}
});
JButton button2 = new JButton("Выбрать");
jfrm.add(button2);
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String word2 = (jtf2.getText());
System.out.println(word2);
}
});
JButton mainButton = new JButton("Ok");
jfrm.add(mainButton);
mainButton.setPreferredSize(new Dimension(1000,50));
mainButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("a");
word.charAt(); //word подсвечивается красным
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Words();
}
});
}
}
вряд ли метод charAt() тут виноват, скорее я чего-то в джаве не понимаю, как работает видимость и доступность переменных P.S. в пометках написано Java FX, но я её не использую тут, соре, слишком простая программа, но с ошибкой сталкиваюсь с такой частенько
Ответы (2 шт):
Ошибка в области видимости переменной. Ты должен сделать так: Сначало объявить переменную после:
public class Words {
Strind word;
....
....
а потом уже в button1.addActionListener сделать word = (jtf1.getText());
Вот и всё :)
Вы создали переменную word внутри метода actionListener() кнопки button1.
Переменная созданная внутри метода только им и видима, потому когда вы хотите её использовать в actionListener() кнопки mainButton то он он не понимает на что вы ссылаетесь.
Чтобы решить эту проблему создавайте переменную word вне методов, например в классе Words.