JFrame方法概率

时间:2014-01-19 10:56:48

标签: java swing constructor actionlistener mainclass

我目前正在开发一款基于文本的小游戏,但我一直在收到错误... 我不知道如何修复它,因为它是我第一次使用JFrame。问题是, 当我将ButtonDemo方法转换为ButtonDemo()而不是public static void ButtonDemo()时,ButtonDemo()会出现问题。但是,如果是public static void ButtonDemo(),则jbtnW.addActionListener(this)会出现错误,说我无法使用“this”,因为ButtonDemo()static

package game;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import game.Storylines.*;

public class Frame implements ActionListener{
    VillageDrengr shops = new VillageDrengr();

    static JLabel jlab;

    static JFrame jfrm = new JFrame("A Game");

    public static void ButtonDemo() {
        jfrm.setLayout(new FlowLayout());
        jfrm.setSize(500, 350);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton jbtnW = new JButton("Equipment Shop");
        JButton jbtnP = new JButton("Potion Shop");

        jbtnW.addActionListener(this);
        jbtnP.addActionListener(this);

        jfrm.add(jbtnW);
        jfrm.add(jbtnP);

        jlab = new JLabel("Choose a Store.");
        jfrm.add(jlab);

        jfrm.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("Equipment Shop")) 
            jlab.setText("You went in to the Equipment Shop.");
        else
            jlab.setText("You went in to the Potion Shop.");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ButtonDemo();
            }
        });
    }

}

1 个答案:

答案 0 :(得分:1)

您收到错误

  

非静态变量this无法从非静态上下文中引用。

正在发生的事情是this引用的ActionListener不是static

一个简单的解决方法是使ButtonDemo方法非静态,并从main这样调用方法

        public void ButtonDemo() {
        ....

        public void run() {
           new Frame().ButtonDemo();
        }

您实例化Frame类,并调用该方法。错误消失了。

此外,您不应该为您的班级Frame命名,因为已经有一个AWT Frame班级。你可能会遇到问题。

此外,遵循Java命名约定,方法名称以小写字母开头,即buttonDemo()。在没有查看你的类名的情况下,我完全感到困惑,认为ButtonDemo()是类构造函数。