У меня есть этот код:
private static void inputGUI() {
inputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inputFrame.setTitle("The INPUT");
panel.add(printButton);
printButton.setBounds(135,560,120,30);
inputFrame.setLayout(null);
inputFrame.add(panel);
panel.setBounds(1000,100,366,768-100);
//ActionListeners!!!
printButton.addActionListener(this);
inputFrame.setSize(1366,768);
inputFrame.setVisible(true);
}
Я хотел добавить слушателя действий к моему JButton с именем
printButton
У меня также есть JFrame
inputFrame
и это в моей главной
public static void main (String[] args) {
inputGUI();
}
Но я продолжаю получать эту ошибку:
error: non-static variable this cannot be referenced from a static context
Как я могу это сделать? Было бы здорово, если бы вы, ребята, могли мне помочь, не используя анонимный внутренний класс (мой учитель еще не научил нас этому уроку). Спасибо!
Проблема заключается в следующем коде.
printButton.addActionListener(this);
Причина: inputGUI()
является статическим, в результате которого отрицается использование this
ключевого слова, которое ссылается на текущий объект.
Решение:
Просто создайте новый объект класса, который обрабатывает события printButton
. За это отвечает MainClass. Измените свой код следующим образом:
printButton.addActionListener(new MainClass());
Альтернативное решение:
Сделайте inputGUI()
не статическим. И назовите его из основного метода как new MainClass().inputGUI()
. Остальное остается таким же.
import java.awt.event.ActionEvent;
import javax.swing.*;
public class NewClass {
public NewClass(){
//inputGUI();
}
public static void method(){
JOptionPane.showMessageDialog(null, "");
}
private static void inputGUI() {
JFrame inputFrame = new JFrame();
JPanel panel = new JPanel();
JButton printButton = new JButton();
inputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inputFrame.setTitle("The INPUT");
panel.add(printButton);
printButton.setBounds(135,560,120,30);
inputFrame.setLayout(null);
inputFrame.add(panel);
panel.setBounds(1000,100,366,768-100);
//ActionListeners!!!
printButton.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
method();
}
});
inputFrame.setSize(1366,768);
inputFrame.setVisible(true);
}
public static void main(String[]args){
inputGUI();
}
}
вы имеете в виду вот так?