等待来自摆动组件的输入

时间:2018-10-11 15:31:43

标签: java swing oop

本质上,我想让我的类 Game 初始化并与实现了 Player 接口的类进行交互。

现在要解决的问题: 当我的 Game 类从此GUI(下面的代码)调用方法 getMove 时,GUI(我)肯定不会决定该动作。 Game 类将很乐意等待该决定,这不是问题。

我正在寻找一种可能会暂停功能的可能性,但是我没有找到任何适合的方法。

我需要的是函数等待JFrame发生动作或将变量设置为正确数量的位置。 GUI必须在此等待时间内正常工作。

我发现了类似的问题

Java : Wait for user input on swing window

Java Swing: Waiting for Mouse Clicked event before returning an Int

Swing GUI doesn't wait for user input

但是我要么对答案不满意,要么无法为我提取有价值的信息,因为答案和询问者一样非常具体。我试图尽我所能来了解Java和OOP,但我还是悄悄地说,还是一个新手。

public class GUI extends javax.swing.JFrame implements Player{
    /**
     * Creates new form GUI
     */
    public GUI() {
        initComponents();
    }


    private void initComponents() {...} //not relevant

    // Variables declaration - do not modify   - not relevant either                  
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jErrorLabel;
    private javax.swing.JTable jTable1;
    // End of variables declaration                   

    @Override
    public int getMove() {
        throw new UnsupportedOperationException("Not supported yet."); 
    }
}

编辑: 我想知道Java如何处理与非Java应用程序的接口,因此我想像一下播放器和 Game 之间的语言障碍,其中只有 Player 作为接口,因此说。

我知道他暗示着不寻常且效率低下的代码,因为实际上没有语言障碍。对我来说,知识比产品更重要。

1 个答案:

答案 0 :(得分:1)

在这种情况下有两个关键概念需要了解和理解(还有更多,但让我们坚持两个最重要的概念):

  1. 事件驱动的编程和
  2. (我认为您的概念中缺少的东西)状态机

GUI如何响应事件将严重取决于程序的状态,通常取决于键字段所保存的值,这就是您通常“等待输入”的方式。因此,例如,如果您正在编写纸牌游戏,并且用户按下按钮以获取另一张纸牌,但轮到他了,则GUI会知道轮到谁了(键 状态 ),并向用户回复错误消息而不是卡,因为在错误的时间(GUI处于错误的状态)按下了“给我卡”按钮。 / p>

因此,GUI永远不会进入等待输入的状态,而是随着程序的进行而改变状态。如果将userTurn字段设置为用户的字段,并且他按下“给我卡片”按钮,则游戏会给出一张卡片,然后将其状态更改为到下一个玩家的回合(如果这就是程序逻辑所说的。)

请注意,这些概念不是特定于Swing的,并且几乎可以与任何 GUI库一起使用


还请注意,此逻辑有误:

  

当我的Game类从此GUI调用方法getMove(下面的代码)

否,游戏实际上甚至不应该呼叫getMove(),而是

  • 游戏应通知玩家和GUI他们可以移动,并且当前 turn 状态适用于该当前玩家
  • 然后用户进行移动-以表示移动的方式与GUI的组件进行交互
  • GUI(视图)通知控件正在执行此操作
  • 然后控件告诉模型玩家正在请求移动。该模型可以回复该移动是否有效,
  • 然后该模型可以相应地更改其状态:如果此举无效,则同一位玩家的回合,或者,如果此举有效,则可以在模型内更改该玩家的状态,并更改 turn 字段/状态指向下一个播放器(或者如果计算机轮到该计算机,则指向计算机AI)。
  • 程序必须允许模型和视图之间进行双向通信。