【问题标题】:Listening for action on internal JPanel from a JFrame从 JFrame 监听内部 JPanel 上的操作
【发布时间】:2010-08-24 22:08:29
【问题描述】:

我有一个 JFrame,里面有一个 BottomPanel(我创建的一个扩展 JPanel 的类)。 在该 JPanel 内部是另一个名为 DicePanel 的 JPanel(它再次扩展了 JPanel)。

在 DicePanel 中有一个名为“结束回合”的按钮,单击该按钮应结束程序所基于的棋盘游戏的玩家当前回合。我想以某种方式从我的 JFrame 内部监听来自 DicePanel 的 buttonClicked 事件。

我该怎么做?

编辑:现在我有

for (Player p : f.playerList) {
    int diceRoll = dice.roll();
    System.out.println(p.move(diceRoll));
    System.out.println(p.getCurrentCell());
    System.out.println(diceRoll);
    f.bottomPanel.dice.setDice(dice.getDice1(), dice.getDice2());
    while (true) {
        try {
            break;
            System.out.println("Waiting");
            Thread.sleep(2000);
        } catch (Exception e) {
        }
    }
}

【问题讨论】:

  • 从注释中迁移代码以提高可读性;如果不正确,请恢复。

标签: java action jframe listener jpanel


【解决方案1】:

为什么?

我的意思是,您可以通过在 JFrame 中定义按钮并将其传递直到可以将其放置在 DicePanel 中来做到这一点,但是为什么首先需要在 JFrame 中添加侦听器呢?

【讨论】:

  • 好的,游戏运行正常,轮到一个玩家。单击“结束回合”按钮时,我想结束其回合。基本上,我需要制作一个 while 循环,上面写着“轮到他时 wait ”。当按下按钮时,我需要设置一个布尔值或其他东西让 Turn() 方法知道他的回合结束了。
  • 现在我有: for(Player p : f.playerList){ int diceRoll = dice.roll(); System.out.println(p.move(diceRoll)); System.out.println(p.getCurrentCell()); System.out.println(diceRoll); f.bottomPanel.dice.setDice(dice.getDice1(),dice.getDice2()); while(true){ try{ // 中断; System.out.println("等待中"); // 线程.sleep(2000); } 捕捉(异常 e){ } } }
  • 但这只会产生一个无限循环,并且不会显示框架(因为系统从未调用paint() 方法,我猜是因为循环)。也许我需要创建另一个线程 - 一个用于 Turn 方法,一个用于 GUI?
  • 一般来说,将您的 GUI 放在与实际代码不同的线程上是一个非常好的主意 - 这样您的主窗口在您在后台进行计算时保持响应。
【解决方案2】:

您可以使用setDefaultButton(),“无论按钮是否具有键盘焦点,都会在根窗格中发生 UI 定义的激活事件(通常是 Enter 键)时激活。”

JFrame f = new JFrame("Dice Game");
JButton b = new JButton("End Turn");
f.getRootPane().setDefaultButton(b);

这是一个非常简单的example,它建议您如何构建您的游戏以避免无限循环,而无需使用多个线程。

顺便说一句,在没有至少 some 输出的情况下捕获异常是个坏主意,例如e.printStackTrace()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多