非静态变量不能从静态上下文JFrame引用

时间:2014-08-25 14:23:43

标签: java swing constructor static jframe

我有这段代码:

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

我该怎么做?如果你们可以在不使用匿名内部课程的情况下帮助我,那将是很棒的。(我的老师还没有教过我们那个教训)。谢谢!

2 个答案:

答案 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();   
    }
}
你的意思是这样吗?