带有GUI的黑杰克,从另一个类的ActionListener向主框架添加对象

时间:2013-03-17 15:27:01

标签: java swing class jframe actionlistener

我用gui做了一个黑杰克版本。我的问题是,大部分实现都在创建窗口的同一个类中。 GameWindow类启动JFrame,添加卡图标等可视对象,文本存储到JLabel,然后将它们添加到不同的JPanel。

很好,但是GameWindow(实现ActionListener)也将ActionListener添加到按钮(简单的JButton不是创建的类),并实现ActionPerformed。

我想为每个按钮创建一个类,比如“Class Deal实现ActionListener”,然后让该类处理ActionPerformed(ActionEvent e)。问题是如何从其他类向GameWindow添加对象? 我如何将Deck,Player(得分和卡片,存储在ArrayList中)和Bank(得分和卡片),对象发送到相应类别的ActionPerformed(Deal,Stay和Hit)?

我不想发布代码因为它很多,因为我尝试了不同的解决方案现在有点乱,但如果你想让我发布代码的任何部分或全部只是告诉我

编辑,认为是小文字;)

我现在使用的课程是 CardDeck有一个ArrayList和drawCard(),shuffle()等方法。 Card,有一个ImageIcon和一个保存其值的int。 GameWindow扩展JFrame实现ActionListener,初始化JFrame,还处理与JButton Deal,Hit和Stay相关联的ActionPerformed(这是我想要改变的)。 玩家,持有在ArrayList中绘制的玩家卡,并将得分作为int 银行,与玩家相同但是对于ai。 Main,执行GameWindow。

1 个答案:

答案 0 :(得分:0)

分而治之。您需要一个GameEngine类,它保存数据并提供操作它的方法。你需要一个单独的GameWindow来处理显示游戏,但依靠GameEngine来保存数据并实际运行游戏。 ActionListner需要对GameEngine的引用,这就是全部;他们可以通过调用方法来做其他事情。

GameEngine本身可以在内部使用其他类:Deck,Card等。尝试使每个类代表一个明确定义的概念。将代码保留在其使用的数据附近。