我有这段代码:
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
我该怎么做?如果你们可以在不使用匿名内部课程的情况下帮助我,那将是很棒的。(我的老师还没有教过我们那个教训)。谢谢!
答案 0 :(得分:0)
以下代码导致问题。
printButton.addActionListener(this);
<强>原因:强>
inputGUI()
是静态的,因此使用引用当前对象的this
关键字将被拒绝。
<强>解决方案:强>
只需创建一个处理printButton
点击事件的类的新对象。 Say MainClass负责。更改您的代码如下:
printButton.addActionListener(new MainClass());
替代解决方案:
使inputGUI()
非静态。并从main方法调用它new MainClass().inputGUI()
。休息时间保持不变。
答案 1 :(得分:0)
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();
}
}
你的意思是这样吗?