我想在ActionListener类中使用一个对象

时间:2015-11-23 02:52:37

标签: java static actionlistener

我正在尝试实现我的卡片游戏代码,这些代码可以用作gui。我在ActionListener类中使用我的Deck时遇到问题。 Deck是Class Deck的一个对象,它有一个变量/实例(我不知道正确的术语)一个ArrayList和一些从Deck等中选择一张卡的方法.actionlistener类的代码是这样的:

class Play  implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent event) {          
        Card a1, a2, b1, b2;


        a1 = Deck.pickCard(Deck.Deck);

        String Player2="Player2";
        String Player1="Player1";
        int score1=0;
        int score2=0;
        System.out.println(Player1 + " drew a " + a1.getName(a1) + " of " + a1.getType(a1));
        a2 = Deck.pickCard(Deck.Deck);
        System.out.println(Player1 + " drew a " + a2.getName(a2) + " of " + a2.getType(a2));
        b1 = Deck.pickCard(Deck.Deck);

        System.out.println(Player2 + " drew a " + b1.getName(b1) + " of " + b1.getType(b1));
        b2 =Deck.pickCard(Deck.Deck);
        System.out.println(Player2 + " drew a " + b2.getName(b2) + " of " + b2.getType(b2));
        if (a1.getValue(a1) + a2.getValue(a2) > b1.getValue(b1) + b2.getValue(b2)) {
            score1 = score1 + 1;
            System.out.println(Player1 + " win and has " + score1 + " points");
        }
        if (a1.getValue(a1) + a2.getValue(a2) < b1.getValue(b1) + b2.getValue(b2)) {
            score2 = score2 + 1;
            System.out.println(Player2 + " win and has " + score2 + " points");
        }
    } 
}

如果我在类Deck中设置了Play类的构造函数,则代码会正常运行,但每次Deck重新创建并且拾取的卡都不会从Deck中删除。当我输入这个问题时,我记得那些分数也得到了刷新。我试着把这段代码放到一个方法中,并尝试在Play类中调用该方法,但这似乎也不起作用,我的文字加下划线红色说a non static method cannot be referenced from a static context。我是一般的编程新手,这些继承和变量的问题现在看起来太尴尬和奇怪了。如果可能的话,我想问的是如何解决这类问题,因为我已经为前一部分练习做了大量的工作。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定你的具体情况是什么,但也许你需要让你的构造函数接受一个Deck作为参数:

class Play implements ActionListener {
    Deck deck;
    public Play(Deck deck) {
        this.deck = deck;
    }
    @Override
    public void actionPerformed(ActionEvent ae) {
        ...
    }
}

现在你可以addActionListener(new Play(deck));并给Play提供你的甲板的参考。