繁体   English   中英

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

[英]Non-static variable this cannot be referenced from a static context 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);
}

我想将动作监听器添加到名为

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的click事件。 说MainClass对此负责。 更改您的代码,如下所示:

 printButton.addActionListener(new MainClass());

替代解决方案:
使inputGUI()为非静态。 并从main方法中调用它作为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();   
    }
}

你的意思是这样吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM