Java JFrame方法prob
我目前正在开发一个基于文本的小游戏,我不断地得到一个错误。。。 我不知道如何修复它,因为这是我第一次使用Java JFrame方法prob,java,swing,constructor,actionlistener,mainclass,Java,Swing,Constructor,Actionlistener,Mainclass,我目前正在开发一个基于文本的小游戏,我不断地得到一个错误。。。 我不知道如何修复它,因为这是我第一次使用JFrame。问题是,, 当我将ButtonDemo方法设置为ButtonDemo(),而不是public static void ButtonDemo(),则ButtonDemo()存在问题。但是,如果它是public static void ButtonDemo(),则jbtnW.addActionListener(this)上会有一个错误,说明我不能使用“this”,因为ButtonDe
JFrame
。问题是,,
当我将ButtonDemo
方法设置为ButtonDemo()
,而不是public static void ButtonDemo()
,则ButtonDemo()存在问题。但是,如果它是public static void ButtonDemo()
,则jbtnW.addActionListener(this)
上会有一个错误,说明我不能使用“this”,因为ButtonDemo()
是静态的
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();
}
});
}
}
你犯了个错误
非静态变量不能从非静态上下文中引用此
发生的情况是,这个
引用的是ActionListener
,它不是静态的
一个简单的解决方法是使ButtonDemo
方法非静态,并像这样从main
调用该方法
public void ButtonDemo() {
....
public void run() {
new Frame().ButtonDemo();
}
实例化Frame
类,并调用该方法。错误消失了
另外,您不应该给类命名为Frame
,因为已经有一个AWTFrame
类。你可能会遇到问题
此外,遵循Java命名约定,方法名称以小写字母开头,即buttonDemo()
。如果不看你的类名,我会完全困惑地认为buttonemo()
是类构造函数。那么,你使用buttonemo()
方法到底有什么问题?你只是说“有问题”。。。怎么了?你能粘贴堆栈跟踪吗?也许你想要一个构造函数而不是一个方法,然后在main
中执行newbuttondemo()
。。构造函数public ButtonDemo(){}