从 JFrame 监听内部 JPanel 上的操作

发布于 2024-09-16 00:49:58 字数 707 浏览 2 评论 0原文

我有一个 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) {
        }
    }
}

I have a JFrame that has a BottomPanel (a class I made that extends JPanel) inside it.
And inside that JPanel is another JPanel called DicePanel(that again extends JPanel).

In DicePanel there is a button called 'End Turn' that when clicked should end the players current turn for the board game the program is based on. I want to somehow listen for the buttonClicked event from DicePanel from inside my JFrame.

How do I do this?

Edit: Right now I have

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) {
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

李白 2024-09-23 00:49:58

为什么?

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

Why?

I mean, you could probably do it by defining the button in your JFrame, and passing it along until you can place it in the DicePanel, but why do you need to add a listener in the JFrame in the first place?

北城孤痞 2024-09-23 00:49:58

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

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

这是一个非常简单的示例,它建议您如何构建游戏以避免无限循环而不诉诸多个线程。

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

You can use setDefaultButton(), "which will be activated when a UI-defined activation event (typically the Enter key) occurs in the root pane regardless of whether or not the button has keyboard focus."

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

Here's a very simple example that suggests how you might structure your game to avoid an infinite loop without resorting to multiple threads.

As an aside, it's a bad idea to catch an exception with out a least some output, e.g. e.printStackTrace().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文